C++标准库vector门类

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)函数,所以每次循环过程中调用它的运行是代价是比较小的。

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