#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;
}
STL序列容器(vector)
最新推荐文章于 2023-05-19 14:31:33 发布