C++标准库vector类型


vector 有称为容器。头文件:#include<vector>  ;using声明:using std::vector; vector是一个类模板,可用于多个不同的数据类型。

注解:vector是一个类模板,而不是一个数据类型。

1. vector对象的定义和初始化

 vector<int> v1; //默认构造函数初始v1为空
 vector<int> v2(v1); //v1的副本
 vector<int> v3(5,12); //包含5个值为12 的元素
 vector<int> v4(3); //包含值初始化的元素的3个副本

关键概念:vector对象的动态增长

可在运行时高效地添加元素。虽然可预先分配内存,当更有效的方法是先初始化一个空的vector对象,然后再动态地增加元素。

如果vector保存内置类型,将用0值初始化;如果是类类型,将调用默认构造函数。

2.vector对象的操作

 //1.size()和empty(),与string类似
 if(v3.empty() == false)
 {
  vector<int>::size_type vs = v3.size();
  cout<<"v3 size: "<<vs<<endl;
 }

添加元素到vector对象后面:

 int n ;
 while(cin>>n)
 {
  v2.push_back(n);
 }

下标操作:

 for(vector<int>::size_type ix = 0;ix!=v3.size();ix++)
 {
  if(ix%2==0)
  {
   v3[ix] = 18 ;
  }
  cout<<v3[ix]<<" ";
 }

关键概念:安全的泛型编程

上例中for循环判断条件用!=而不是用<来判断,没有在for循环之前就调用size函数并保存其值,而是在for语句头中调动size成员函数。

c++程序员习惯于优先使用!=而不是<来判断。调用 size成员函数而不是保存其返回值是个良好的编程习惯。在C++中,有些数据结构是动态增长的,循环可以很容易地增加新元素,若确实增加了,那么用已保存的size值作为循环条件就会有问题,应为没有将新加入的元素计算在内。所以倾向于在每次循环中测试size的当前值。

可能会觉得每次调用size函数对性能的影响,C++中的有些函数可以声明为inline函数。像size这样的小库函数都可以定义为内联(inline)函数,所以每次循环过程中调用它的运行是代价是比较小的。

仅能对已存在的元素进行下标操作。

相关内容