.1 基本概念
与数组类似,称为单端数组,可以动态扩展(找更大的空间,将原数据拷贝到新空间,释放原空间)。迭代器支持随机访问
.2 构造函数
.3 赋值操作
函数原型:
vector& operator=(const vector &vec);
//重载等号操作符assign(beg, end);
//将[beg, end)区间中的数据拷贝赋值给本身。区间尾部无法取到
vector<int> p1;
p1.push_back(10);
p1.push_back(20);
p1.push_back(30);
p1.push_back(40);
vector<int> p2;
p2.assign(p1.begin(), p1.end()); //赋值
pint(p2);
assign(n, elem);
//将n个elem拷贝赋值给本身。
vector<int> p2;
p2.assign(4, 10);
pint(p2);
.4 容量和大小
vector<int> p1;
p1.push_back(10);
p1.push_back(20);
p1.push_back(30);
p1.push_back(40);
int i = p1.empty(); //若为空返回1,不为空返回0
cout << i << endl;
cout << "p1的容量为:" << p1.capacity() << endl; //容量与大小可能不同
cout << "p1的大小为:" << p1.size() << endl;
p1.resize(10); //以0填充位置
.5 插入和删除
.6 数据存取
void test() {
vector<int> p;
p.push_back(10);
p.push_back(20);
p.push_back(30);
p.push_back(40);
cout << "容器中2号元素为:" << p.at(2) << endl;
cout << "容器中2号元素为:" << p[2] << endl;
cout << "容器中第一个元素为:" << p.front()<< endl;
cout << "容器中最后一个元素为:"<<p.back() << endl;
}
.7 互换容器
实现两个容器内元素互换swap(vec);
当对大容器使用resize时可能会导致容量过大浪费空间。使用vector<int>(p).swap(p);
来解决
其中vector§以p的大小创建了一个匿名对象,然后交换使的容量减小
void test() {
vector<int> p;
for (int i = 0; i < 10000; i++) {
p.push_back(i);
}
cout << "P的容量为:" << p.capacity() << endl;
cout << "P的大小为:" << p.size() << endl;
p.resize(2);
cout << "指定长度后P的容量为:" << p.capacity() << endl;
cout << "指定长度后P的大小为:" << p.size() << endl;
vector<int>(p).swap(p);
cout << "收缩后P的容量为:" << p.capacity() << endl;
cout << "收缩后P的大小为:" << p.size() << endl;
}
.8 预留空间
减少容器再动态扩容时的扩展次数
reserve(int len);
//容器预留len个元素长度,预留位置不初始化,元素不可访问。
void test() {
vector<int> p;
int num = 0; //统计开辟内存次数
int* f = NULL;
for (int i = 0; i < 1000; i++) {
p.push_back(i);
if (f != &p[0]) { //开辟了一次空间
num++;
f = &p[0];
}
}
cout << "未预先指定的p开辟次数为:" << num << endl;
vector<int> p1;
p1.reserve(1000);
num = 0;
f = NULL;
for (int i = 0; i < 1000; i++) {
p1.push_back(i);
if (f != &p1[0]) {
num++;
f = &p1[0];
}
}
cout << "预先指定的p1的开辟次数为:" << num << endl;
}