1.初识vector数组:
数组分为静态数组(传统数组)与动态数组(vector数组)。相比传统数组,vector数组的操作更加方便。
对比(一一对应)
静态数组 : 1.在定义时已经固定了数组长度不会再变化(定长容器)
2.通过常用函数对元素进行操作 (具有一定局限性)
3.删除元素需要将所有元素进行移动,维护连续性
4.不能用某个数组将其直接初始化
动态数组:
1.可以随时操作进行变换长度(变长容器)
2.通过特有函数对元素进行操作
3.直接删除
4.能用某个数组将其直接初始化
2.vector数组的定义:
a. vector<存储数据类型名>数组名; //不需要标明数组长度(随时可以插入) //可以理解为是一个空竹签,竹签上随时可以插上某种口味的糖葫芦(某种数据类型),vector是竹签的属性(即关键字)。
b. vector<存储数据类型名>数组名(元素个数) //竹签上随时可以插上某种口味的糖葫芦(某种数据类型),现在已经先串上“元素个数”个糖葫芦,但不影响之后再往上串
c. vector<存储数据类型名> 数组名(数组名); //注意括号内的参数是数组名 //用括号中的数组的值初始化新定义的数组(一一对应)
d. vector<存储数据类型名> 数组名(元素个数,数值或字符); //在b的基础上为每个元素赋初值(初值为括号中的第二个参数)
3.vector常用操作函数(vec均指代数组名):
a. vec.pop_back() ; //删除数组的最后一个元素(把最后一个糖葫芦扔掉) b. vec.erase(vec.begin()+i); // 删除第i+1个元素(不可以直接码vec[10]或10,必须通过这种方式访问) c. vec.clear(); //清空该数组,变成一个“空竹签” d. vec.erase(vec.begin()+i,vec.end()+j);// 将i到j间的元素全部删除(把这几个糖葫芦从串上砍掉) e. vec.push_back(); //在末尾插入一个元素(在括号中写变量名||符合类型的值) f. vec.insert(vec.begin()+i,a); //在第i个元素后插入a(||符合类型的值) g. vec .begin() ; //访问第一个元素(a[0]) h. vec.end(); //访问末尾元素 i. vec.empty(); //判断该数组是否为空,空返回1,不空返回0(看看是否还有糖葫芦) j. vec.size() ; //返回数组长度(看看有几个糖葫芦) l. 随学习持续完善中......
4.代码示例:
#include<iostream> #include<vector> using namespace std; char q[100]; int e=100; vector <int> a;//空“竹签” vector <double> b(10);//串10个糖葫芦 vector <char> c;//(100,q);//用q数组给c赋值 vector <int> d(100,1);//先串100个,赋值为1 int main() { a.push_back(e); //在末尾插入一个元素(在括号中写变量名||符合类型的值) a.pop_back();//删除数组的最后一个元素 b.clear();//清空b cout<<b.empty();//查看吧是否为空 //cout<<c.begin();这三种均不符合语法(仅限访问,不能输出) //cout<<c.end(); //cout<<d.begin()+1; cout<<c[0];//仅限输出,不可用于访问 cout<<c.size()<<" ";//返回数组长度(看看有几个糖葫芦) d.insert(d.begin()+1,10);//在第一个元素后加入元素10 cout<<d[1]<<" "; d.erase(d.begin()+1,d.end()+2);//删除1.2之间的元素 d.erase(a.begin()+2);//删除第3个元素 cout<<d[0]; return 0; }