045-C++之STL-->vector
本帖最后由 moc 于 2018-9-16 22:40 编辑1、vector容器简介
vector将元素置于一个动态数组中加以管理。
vector可以随机存取元素(支持索引值直接存取,用[]操作符和at()方法)。
vector尾部添加元素非常快,但在中部或头部添加或移除元素比较费时。
2、vector构造函数
vector采用模板技术,可以存放int,float,string,类对象,指针等元素。
容器元素的存放时按值的复制方式进行的,所以元素类型必须可以复制,(类要了提供拷贝构造函数)。
3、vector元素添加和删除
vector.push_back(i) 尾部添加元素i
vector.front() 容器的头部元素,可做左值
vector.back() 容器的尾部元素,可做左值
vector[] []操作
vector.at(i) at(i)操作,可抛出异常
vector<int> v1;
v1.push_back(1);// 从尾部添加元素
v1.push_back(3);
v1.push_back(5);
cout << "Length:" << v1.size() << endl;
cout << v1.front();// 获取头部元素
cout << v1.back(); // 获取尾部元素
v1.pop_back(); // 弹出尾部元素
cout << v1;
// 修改头部元素的值
v1.front() = 9;// 函数返回值当左值(返回引用)
v1.back() = 0;
cout << v1.front() << v1.back() << endl;
4、vector元素初始化和遍历
1. 数组方式遍历
2. 迭代器遍历
3. 逆向迭代器遍历
// vector元素初始化
vector<int> v2 = v1;// 拷贝构造函数初始化
vector<int> v3(v1.begin(), v1.begin() + 2); // 左开右闭
// vector的遍历
vector<int> v4(10);// 提前分配好内存
for (int i = 0; i < 10; i++)
{
v4 = i + 1;
cout << v4;
}
cout << endl;
// vector的迭代器遍历 //begin指向头元素, end指向最后一个元素的后面
for (vector<int>::iterator it = v4.begin(); it != v4.end(); it++)
{
cout << *it << " ";
}
cout << endl;
// vector的逆向迭代器遍历
for (vector<int>::reverse_iterator rit = v4.rbegin(); rit != v4.rend(); rit++)
{
cout << *rit << " ";
}
5、vector删除和插入元素
vec.clear(); 移除元素中的所有数据
vec.erase(beg, end); 删除[beg, end)间的数据,并返回下一个数据的位置
vec.erase(pos); 删除pos位置的数据,并返回下一个数据的位置
vec.insert(pos, elem); 在pos位置插入一个elem元素的拷贝,并返回新数据的位置
vec.insert(pos, elem); 在pos位置插入n个elem元素,无返回值
vec.insert(pos, beg, end); 在pos位置插入[beg, end)间的数据,无返回值
// 区间删除操作
v4.erase(v4.begin(), v4.begin() + 3);
v4.erase(v4.begin());
cout << endl;
for (vector<int>::iterator it = v4.begin(); it != v4.end(); it++)
{cout << *it << " ";}
cout << endl;
// 删除指定值的元素
for (vector<int>::iterator it = v4.begin(); it != v4.end();)
{
if (*it == 7)
{
it = v4.erase(it); // 当删除迭代器所指向元素的时候,erase操作会让it自动下移
}
else
{
it++;
}
}
for (vector<int>::iterator it = v4.begin(); it != v4.end(); it++)
{cout << *it << " ";}
cout << endl;
// 插入元素
v4.insert(v4.begin(), 111);
v4.insert(v4.end(), 222);
for (vector<int>::iterator it = v4.begin(); it != v4.end(); it++)
{cout << *it << " ";}
页:
[1]