#include<iostream>
#include<vector>
using namespace std;
void printdata(vector<int> &v)
{
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
}
void test01()
{
int array[] = { 0, 1, 2, 3, 4, 5, 6 };
vector<int> v1(array, array + sizeof(array) / sizeof(int));
vector<int> v2(v1.begin(), v1.end());
vector<int> v3;
v3.assign(v2.begin(), v2.end());//assign的初始化
printdata(v3);
}
void test02()
{
vector<int>v1;
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
}
vector<int>v2;
for (int i = 0; i < 10; i++)
{
v2.push_back(i+10);
}
v2.swap(v1);
cout << "交换后的v2里面的额值:";
printdata(v2);
}
int main()
{
test01();//0 1 2 3 4 5 6
test02();//交换后的v2里面的额值:0 1 2 3 4 5 6 7 8 9
system("pause");
}
reserve的作用:在使用vecotor容器之前,不知道容器要预留多大的空间,因此只有边申请边用,也就是在用的过程中如果发现不够了在重新申请预留空间例如:
#include<iostream>
#include<vector>
using namespace std;
void test01()
{
vector<int>v;
int *p=nullptr;
int count = 0;
for (int i = 0; i < 10000; i++)
{
v.push_back(i);
if (p != &v[0])
{
p = &v[0];
count++;//记录每次需要重新开辟内存的次数
}
}
cout << count << endl;//24次
}
int main()
{
test01();
system("pause");
}
结果表明要重新开辟24次空间但是用reserve就不一样了
#include<iostream>
#include<vector>
using namespace std;
void test01()
{
vector<int>v;
v.reserve(10000);//预留空间
int *p=nullptr;
int count = 0;
for (int i = 0; i < 10000; i++)
{
v.push_back(i);
if (p != &v[0])
{
p = &v[0];
count++;//记录每次需要重新开辟内存的次数
}
}
cout << count << endl;//1次
}
int main()
{
test01();
system("pause");
}
就开辟了一次空间
vector的插入
#include<iostream>
#include<vector>
using namespace std;
void printdata(vector<int> &v)
{
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
}
void test01()
{
vector<int>v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
v.insert(v.begin()+4, 2, 10);//参数1:从哪个位置开始插入,参数2:插几个,参数3:插入什么数
printdata(v);//0 1 2 3 10 10 4 5 6 7 8 9
}
int main()
{
test01();//0 1 2 3 4 5 6
system("pause");
}
vector支持随机访问
void test01()
{
vector<int>v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
vector<int>::iterator itBegin = v.begin();
itBegin += 3;//说明支持随机访问,list就不支持了
}
void test02()
{
list<int>v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
list<int>::iterator itBegin = v.begin();
//itBegin += 3;//,list就不支持,报错
itBegin++;
}