vector的定义方式
方式1:构造某一个类型的空容器
vector<int> v1;//构造一个int类型的空容器
方式2:构造一个含有n个val的某类型容器
vector<int> v2(10, 2);//构造一个含有10个2的int类型的容器
方式3:拷贝构造某类型容器
vector<int> v3(v2);//v2容器的复制品
方式4:使用迭代器拷贝构造一段内容
vector<int> v4(v2.begin(), v2.end());//使用迭代器拷贝构造v2的一段内容
还可以拷贝其他容器
string s("hello");
vector<char> v5(s.begin(), s.end());
vector的空间问题
size和capacity
size获取容器中有效元素的个数,capacity获取容器最大容量
#include<vector>
#include<iostream>
using namespace std;
int main()
{
vector<int> v(10, 2);
cout << v.size() << endl;//10
cout << v.capacity() << endl;//10
return 0;
}
reserve和resize
reserve改变容量,resize改变元素个数
reserve规则:
1.所给值大于capacity时,capacity变成该值2.所给值小于capacity时,什么也不做
resize规则:
1.所给值大于size时,size扩大到该值,扩大的元素默认为0
2..所给值小于size时,size缩小到该值
int main()
{
vector<int> v(10, 2);
cout << v.size() << endl;//10
cout << v.capacity() << endl;//10
v.reserve(20);//改变容器的capacity为20
cout << v.size() << endl;//10
cout << v.capacity() << endl;//20
v.resize(15);
cout << v.size() << endl;//15
cout << v.capacity() << endl;//20
return 0;
}
empty
判断当前容器是否为空
int main()
{
vector<int> v1;
vector<int> v2(10,2);
cout << v1.empty() << endl;//1表示空
cout << v2.empty() << endl;//0表示非空
return 0;
}
vector的迭代器使用
begin和end
begin函数得到第一个元素的位置,end函数得到最后一个元素的后一个位置
正向迭代器遍历容器
int main()
{
vector<int> v(10, 2);
vector<int>::iterator it = v.begin();
while (it != v.end())
{
cout << *it << " ";
it++;
}
cout << endl;
return 0;
}
rbegin和rend
rbegin获取最后一个元素的位置,rend获取容器第一个元素前一个的位置
反向迭代器遍历容器
int main()
{
vector<int> v(10, 2);
vector<int>::reverse_iterator rit = v.rbegin();
while (rit != v.rend())
{
cout << *rit << " ";
rit++;
}
cout << endl;
return 0;
}
vector的增删查改
push_back(尾插)和pop_back(尾删)
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.pop_back();
v.pop_back();
return 0;
}
insert和erase
insert函数可以在所给位置插入一个或多个元素,erase可以删除所在位置的元素,也可以删除区间内的所有元素(左闭右开)
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.insert(v.begin(), 0);//容器开头插个0
v.insert(v.begin(), 5, 1);//容器开头插5个1
v.erase(v.begin());//删除容器开头位置元素
v.erase(v.begin(), v.begin()+1);//左闭右开的删
cout << v.size();//6
return 0;
}
find
在某一特定值位置进行修改要用到find
1.find函数有三个参数,前两个参数确定一个区间(左闭右开),第三个参数确定所选值
2.在区间找到匹配的元素返回它的迭代器,没找到则返回第二个参数
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
vector<int>::iterator pos = find(v.begin(), v.end(), 2);//获取值为2元素的迭代器
v.insert(pos,10);//在2的位置插入10
pos = find(v.begin(), v.end(), 3);//获取值为3元素的迭代器
v.erase(pos);//删除3
return 0;
}
swap
int main()
{
vector<int> v1(10, 1);
vector<int> v2(10, 2);
v1.swap(v2);
return 0;
}
元素访问
vector中对[ ]进行了重载,"下标+[ ]"进行元素访问
int main()
{
vector<int> v(10, 1);
//使用下标的方式便利容器
for (size_t i = 0; i < v.size(); i++)
{
cout << v[i] << " ";
}
cout << endl;
return 0;
}
范围for对vector容器进行遍历(支持迭代器就会支持范围for)
int main()
{
vector<int> v(10, 1);
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
return 0;
}