vector容器
vector容器非常类似数组,也称单端数组
vector容器的迭代器支持随机访问
与数组不同:
数组是在静态空间分配,vector可以动态扩展
动态扩展原理:
重新分配空间,将原空间数据拷贝到新空间,再释放原空间
构造函数
创建vector容器
void get_vector(void)
{
vector<int> v; //无参构造
for (int i = 0; i < 20; i++)
{
v.push_back(i);
}
show_vector(v);
vector<int> v1(v); //拷贝构造
show_vector(v1);
vector<int> v2(v.begin(), v.end());
show_vector(v2);
vector<int> v3(100, 520); //将100个520拷贝给v3容器
show_vector(v3);
}
赋值操作
void assign_vector(void)
{
vector<int> v; //无参构造
for (int i = 0; i < 20; i++)
{
v.push_back(i);
}
vector<int> v1 = v; //直接赋值,重载了加号运算符
show_vector(v1);
vector<int> v2;
v2.assign(v.begin(), v.end()); //利用assign方法赋值
show_vector(v2);
vector<int> v3;
v3.assign(10, 250);
show_vector(v3);
}
容量和大小
void vector_size(void)
{
vector<int> v; //无参构造
for (int i = 0; i < 20; i++)
{
v.push_back(i);
}
if (v.empty())
{
cout << "vector is empty" << endl;
}
else
{
cout << "容量 = " << v.capacity() << endl; //容量输出32
cout << "大小 = "<< v.size() << endl; //容量输出20
}
show_vector(v);
v.resize(10);
if (v.empty())
{
cout << "vector is empty" << endl;
}
else
{
cout << "容量 = " << v.capacity() << endl; //容量输出32
cout << "大小 = "<< v.size() << endl; //容量输出10
}
show_vector(v);
v.resize(50, 10);
show_vector(v);
}
插入和删除
push_back(ele); //尾部插入元素ele
pop_back(); //删除最后一个元素
insert(const_iterator pos, ele); //迭代器指向位置pos插入元素ele
insert(const_iterator pos, int count,ele); //迭代器指向位置pos插入count个元素ele
erase(const_iterator pos); //删除迭代器指向的元素
erase(const_iterator start, const_iterator end); //删除迭代器从start到end之间的元素
clear(); //删除容器中所有元素
void insert_push_pop(void)
{
vector<int> v; //无参构造
for (int i = 0; i < 20; i++)
{
v.push_back(i);
}
show_vector(v);
v.pop_back(); //删除最后一个元素
show_vector(v);
v.insert(v.begin() + 1, 100); //在第二元素位置插入100
show_vector(v);
v.insert(v.end(), 3, 520); //在最后一个元素位置插入3个520
show_vector(v);
v.erase(v.end()-3, v.end()); //删除末尾的3个元素,也就是3个520
show_vector(v);
v.clear(); // 清空容器
show_vector(v);
}
数据存取
直接类似数组访问:
vector[index]; //index访问的哪个元素
vector<int> v; //无参构造
for (int i = 0; i < 20; i++)
{
v.push_back(i);
}
cout << v[0] << endl; //像数组一样通过下标访问
v[0] = 100;
cout << v[0] << endl;
使用at方法访问:
vector.at(int idx); //idx访问的哪个元素
cout << v.at(1) << endl;
v.at(1) = 520;
cout << v.at(1) << endl;
获取第一个元素:
vector.front();
获取最后一个元素:
vector.back();
交换容器内容
vector1.swap(vector2); //将vector1容器内容和vector2互换
利用算法排序
void vector_sort(void)
{
vector<int> v;
v.push_back(10);
v.push_back(2);
v.push_back(3);
v.push_back(5);
v.push_back(30);
show_vector(v);
sort(v.begin(), v.end()); //排序
show_vector(v);
}