C++ STL : std::vector



练习下C++ STL中std::vector类的常用方法,方便以后查阅。

如有不正确的地方,请读者及时指正,欢迎转载,谢谢!

#include 
#include 

//1) 容器通常都是类模板,在使用时需要传递模板参数来实例化容器类型。
//2) 容器内的所有元素都是拷贝,当需要存储自定义类或结构体的时候,容器内通常保存对象的指针。
//3) 可通过容器元素的指针,引用或迭代器来修改容器元素。

//std::vector是最常用的标准库容器,本质上是一个能够存放任意类型的动态数组,能够根据需要动态的改变数组长度。
//优点:支持快速随机访问,因为内部是连续存储,所以查询和访问速度特别快;节省存储空间。
//缺点:内部插入和删除效率非常低,需要适当移动内部元素,所以一般建议在尾部插入和删除数据;当插入的元素数超过最大容量时候,需要重新分配最大容量和拷贝,比较耗时。

inline void testVector() 
{	
	std::vector vct1;

	//初始指定vct2大小为2,当不足时会动态增加
	std::vector vct2(100);	

	//方法capacity获取vector的当前最大容量
	assert(vct1.capacity() == 0);
	assert(vct2.capacity() == 100);
	
	//vector赋值,赋值3个4,会清空原来的vector
	vct1.assign(3,4);
	vct2.assign(vct1.begin(),vct1.end());
	assert(vct1 == vct2);

	//交换两个vector的元素,会重新调整容器当前容量
	vct1.swap(vct2);

	//vector从后面插入一个元素
	vct1.push_back(1);	

	//vector从后面弹出一个元素
	vct1.pop_back();
	
	//错误,vector不能通过下标法插入  
	//vct[0] = 12;					 
	
	//vector遍历,下标法访问vector元素,也可以通过vct1.at(i)访问
	size_t len = vct1.size();
	for (size_t i =0; i < len; i ++) 
	{
		printf("vct1[%d] = %d \n",i,vct1[i]);
	}

	//通过迭代器访问并修改vector元素
	std::vector::iterator viter = vct1.begin();
	for(; viter != vct1.end(); viter++)
	{
		*viter = 2;	
	}

	//清空vector
	vct1.clear();
	assert(vct1.empty());

	//获得vector的大小
	vct1.push_back(1);
	vct1.push_back(2);
	vct1.push_back(3);
	assert(vct1.size() == 3);

	//front和back取第一个和最后一个元素,当容器为空时会抛出异常
	assert(vct1.front() == 1);
	assert(vct1.back() == 3);
		
	//vector删除第一个元素,返回的迭代器指向容器的下一个数据,改变容器的大小同样会使已有的迭代器失效
	viter = vct1.erase(vct1.begin());
	vct1.erase(vct1.begin(),vct1.end());

	//vector插入,vector实现在前端插入
	for (int i=0; i<5; i++)
	{
		vct1.insert(vct1.begin(), i);
	}
			
	//但是当删除大量元素后,vector容量却不会动态减少,C++11可以使用方法shrink_to_fit来压缩vector
	vct1.clear();
	vct1.shrink_to_fit();
	assert(vct1.size() == 0 &&vct1.capacity() == 0);

	return;
}

你可能感兴趣的:(C/C++语言)