基本概念
- 结构与数组非常相似,也称为单端数组
- vector可以动态扩展
- 其迭代器支持随机访问
构造函数
void test01()
{
vector<int> v1;//默认构造
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
}
printVector(v1);
vector<int> v2(v1.begin(), v1.end());//区间方式
printVector(v2);
vector<int>v3(10, 100);//10个100
printVector(v3);
vector<int> v4(v3);
printVector(v4);//拷贝构造
}
赋值
void test01()
{
vector<int> v1, v2, v3, v4;
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
}
v2 = v1;
v3.assign(v1.begin(), v1.end());
v4.assign(10, 100);
printVector(v1);
printVector(v2);
printVector(v3);
printVector(v4);
}
容量和大小
void test01()
{
vector<int> v1, v2;
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
}
printVector(v1);
cout << v1.empty() << "\t" << v2.empty() << endl;
cout << v1.capacity() << endl;
cout << v1.size() << endl;
v1.resize(15, 8);
printVector(v1);
}
插入和删除
void test01()
{
vector<int> v1;
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
}
v1.insert(v1.begin(), 100);//头插
v1.insert(v1.begin()+1, 2, 1000);//插两个数据
printVector(v1);
v1.erase(v1.begin()+5);
//v1.erase(v1.begin(), v1.end());//清空
//v1.clear();//清空
printVector(v1);
}
数据存取
与string 一致,可用front
和back
访问头部和尾部元素
互换容器
void test01()
{
vector<int> v1, v2;
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
}
for (int i = 10; i > 0; i--)
{
v2.push_back(i);
}
v1.swap(v2);
printVector(v1);
printVector(v2);
}
- resize后只会降低大小,不会改变容量;
- 用swap来收缩内存
void test01()
{
vector<int> v1;
for (int i = 0; i < 10000; i++)
{
v1.push_back(i);
}
cout << v1.size() << endl;
cout << v1.capacity() << endl;
v1.resize(3);
cout << v1.size() << endl;
cout << v1.capacity() << endl;
vector<int>(v1).swap(v1);
cout << v1.size() << endl;
cout << v1.capacity() << endl;
}
-
Vector预留空间
void test01() { vector<int> v1; int count = 0; int* p = NULL; v1.reserve(100000);//直接预留100000空间,避免反复扩展空间 for (int i = 0; i < 100000; i++) { v1.push_back(i); if (p != &v1[0]) { p = &v1[0]; count++; } } cout << count << endl;//30 }
< 100000; i++)
{
v1.push_back(i);
if (p != &v1[0])
{
p = &v1[0];
count++;
}
}
cout << count << endl;//30
}