STL序列容器(vector)

#include <iostream>
#include <list>
#include <vector>
#include <deque>

using namespace std;

template<typename T>
void print(T begin, T end)
{
	while (begin != end)
	{
		cout << *begin++ << " ";
	}
	cout << endl;
}

int main()
{
	//容器的定义和初始化的七种方法
	vector<int> x1;											  //默认构造函数
	vector<int> x2(5);										 //x2包含5个int型的元素,初始化值为0
	vector<int> x3(5, 1);									 //x3中包含5个初始化为1的int型的值
	vector<int> x4 = { 2, 2, 2, 2 };					//x4中包含4个值为2的int型数据
	vector<int> x5(x4);								   //拷贝构造,x5中的数据和x4完全一样
	vector<int> x6{ 2, 2, 2, 2 };                      //和x4等价
	vector<int> x7(x6.begin(), x6.end());       //传入的是迭代器,创建一个复制x6的头到尾数据的容器!

	vector<int> v(5, 10);
	vector<int> v1(6, 33);
	vector<int> v2(4, 44);

	print(v.begin(), v.end()); //使用begin()函数返回一个指向vector容器头部的迭代器!
	cout << v[4] << endl;    //使用下标运算符访问数组中的任何元素,不检查数组是否越界
	cout << v.at(4) << endl;  //同样可以访问数组中的任何元素,并且存在检查数组越界的机制,越界时,会抛出“std::out_of_range”异常

	v.assign(4, 9);
	/*while (!v.empty())
	{
		cout << "back elem: " << v.back() << endl;       //back()是读取容器v末尾元素的函数
		v.pop_back();                                                    //pop_back()是用来删除容器v末尾元素的函数
	}*/
	

	//执行删除操作时,是不会检查元素是否存在的,所以想要操作成功,必须确保欲删除的元素存在!
	//v.erase(v.begin());                                            //删除容器v的首元素,返回值为指向删除元素下一个位置的迭代器,即原v[1]的迭代器
	//v.erase(v.begin(), v.end());                     //删除两个迭代器表示的范围内的元素,返回指向最后一个被删元素之后位置的迭代器。此处是删除所有元素,相当于 v.clear()!

	//v.push_back(5);                                                  //表示在容器v末尾插入一个元素5,push_back()函数的作用是在容器尾部插入元素。
	
	
	cout << "size: " << v.size() << endl;                   //size()函数的返回值表示的是当前vector容器中包含的元素个数,即已经存在的真实元素个数
	cout << "capacity: " << v.capacity() << endl;     //capacity()函数的返回值表示的是容器预定义容量的大小,除非空间出现二次分配,否则返回值不会发生变化
	cout << "max_size: " << v.max_size() << endl;   //返回值是固定的4G,表示容器可以申请到的最大容量!


	//v.resize(10);                                           //调整v的大小为10个元素,如果v.size()> n,则多出来的元素被丢弃,若需要添加新元素,则新元素被初始化为0
	//v.resize(10, 88);                                     //调整v的大小为10个元素,原有的数据不变,新加的元素都初始化为88
	
	v.reserve(10); 
   //和resize()函数作用相似,都是用来调整容器的容量,但是不同于resize()函数的是:reserve()函数只是改变预分配的空间(和capacity直接挂钩),而不会增加新数据!
	print(v.begin(), v.end());
	cout << "size: " << v.size() << endl;
	cout << "max_size: " << v.max_size() << endl;
	cout << "capacity: " << v.capacity() << endl;              //capacity()其实就是resize()或者reserve()出来的大小!

	v.insert(v.begin(), 2, 20);                 //insert()函数用来在相应容器指定位置插入指定数量指定数值的元素。此处就是在v的头部插入2个值为20的数据。
	print(v.begin(), v.end());

	v.insert(v.begin(), v1.begin(), v1.end());
	print(v.begin(), v.end());
	cout << "front elem: " << v.front() << endl;
	cout << "size: " << v.size() << endl;
	cout << "max_size: " << v.max_size() << endl;

	//assign()函数的参数决定的相应容器中有多少个元素以及他们的值是多少。
	//而且由于assign()函数旧元素是被替换掉的,所以其中的参数不能是指向调用assign()函数的容器!
	v.assign(v2.begin(), v2.end());     //assign()函数的作用是进行数据替换。此处就是将v容器中的原有数据替换v2的begin到end的数据!
	v2.assign(2, 1);                           //此处就是将v2中的数据替换成2个1!
	cout << v.size() << endl;
	print(v.begin(), v.end());

	system("pause");
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值