vector
1.动态扩展:
并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。(一般会找比预料更多的空间)
2.vector容器构造
1.构造
vector <int> c1;
通过区间方式进行构造
vector<int>c2(c1.begin(), c1.end());
n个elem的方式进行构造
vector<int>c3(10, 100); //10个100
拷贝构造
vector<int>c4(c3);
2.vector对象中元素的遍历输出:
void print(vector<int> &c)
{
for(vector<int> :: iterator it = c.begin();it != c.end();it ++)
{
cout<<*it<<" ";
}
cout<<"endl";
}
3.赋值操作
等号赋值
vector<int> c1;
vector<int> c2;
c2 = c1;
//assign
vector<int> c3;
c3.assign(c1.begin(), c1.end());
//n 个elem的方式
vector<int> c4;
c4.assign(10, 100); //10个100
4.vector容量和大小
容量永远大于等于元素个数
c.resize(15);//原来如果只有10个元素的话,会在末尾自动加5个 0 ;
c.resize(15, 100);//可以自己设定默认的填充值,此时会在后面补充5个100
5.vector的插入和删除
//插入 第一个参数是迭代器
v1.insert(v1.begin(), 100); //第一个元素变成了100
//插入n个elem元素
v1.insert(v1.begin(), 5, 100); //前五个元素变成了100
//删除 参数也是迭代器
v1.erase(v1.begin()); //删除第一个元素
//区间删除
v1.erase(v1.begin(), v1.end()); //删除所有元素
//等价于:
v1.clear();
6.vector数据存取
7.vector互换容器
v1.swap(v2); //v1与v2内容互换
//实际用途
//巧用swap可以收缩内存空间
//当vector中元素个数非常大时,vector自动扩增的容量也会随之变大 100000 138900
//当使用resize重置元素个数时,resize并不会改变原有的容量,只会改变原有的大小 3 138900
//:
vector<int>(v).swap(v); //此时大小和容量分别为: 3 3
8.vector预留空间
对于大数据量的容器来说,比如100000个数据,它会使用30次动态内存的拓展,容器存数据是重新开辟一个空间~
此时的解决办法是:
在存数据之前,使用:
v.reserve(100000); //此时仅仅使用1次动态内存的拓展