vector(矢量)是一个动态数组,用来存储数据,使用者可以事先不用指定需要存储的数据项的多少。
1. 创建vector对象
其中vector持有的数据类型在<>中指定,如下:
#include <vector>
int main()
{
// 创建一个初始大小为6的vertor对象
std::vector<Student> stuArr(6);
// 创建一个初始大小为默认值的vector对象
std::vector<Student> stuList;
}
2. 添加元素
2.1 在vector末尾追加元素
void push_back(value_type&& __x)
void emplace_back(_Args&&... __args);
建议使用emplace_back,其效率比较高,具体可以看网上的分析。
使用示例:
Student stu;
stuList.emplace_back(stu);
2.2 把一个vector中的元素插入到另外一个vector中
如下示例,把老的vector插入到新的vector中。
inser的第一个参数是插入的起始位置,第二个参数是老vector的开始位置,第二个参数是老vector的结束位置(不包含此位置)
std::vector<std::string> oldStuList;
oldStuList.emplace_back("a");
oldStuList.emplace_back("b");
oldStuList.emplace_back("c");
std::vector<std::string> newStuList;
newStuList.emplace_back("d");
newStuList.emplace_back("e");
newStuList.insert(newStuList.begin(), oldStuList.begin(), oldStuList.end());
for (std::string s : newStuList) {
std::cout << s << std::endl;
}
3. 访问元素
3.1 访问单个元素
vector重载了[],因此,可以像普通数组那样来访问vector中的元素。
std::vector<Student> stuList;
Student stu;
stuList.emplace_back(stu);
std::cout << stuList[0].getAge() << std::endl;
3.2 遍历vector
3.2.1 使用普通for循环遍历
std::vector<Student> stuList;
Student stu;
stuList.emplace_back(stu);
for (int i = 0; i < stuList.size(); i++) {
std::cout << stuList[i].getAge() << std::endl;
}
3.2.2 使用迭代器
迭代器其实就是指向vector中元素的指针
std::vector<Student> stuList;
Student stu;
stuList.emplace_back(stu);
for (auto pd = stuList.begin(); pd != stuList.end(); pd++) {
std::cout << (*pd).getAge() << std::endl;
}
3.2.3 增强for循环
std::vector<Student> stuList;
Student stu;
stuList.emplace_back(stu);
for (Student student : stuList) {
std::cout << student .getAge() << std::endl;
}
3.2.4 for_each
第一个参数是vector的起始位置,第二个是结束位置,第三个是要运行的函数指针
for_each(newStuList.begin(), newStuList.end(), printS);
4. 删除元素
通过erase方法可以把一个vector中的某些参数删除,该方法接收两个参数,分别是迭代器的开始位置和迭代器的结束位置(不包含该位置上的元素).
如下示例,把数据的第二个元素删除
newStuList.erase(newStuList.begin() + 1, newStuList.begin() + 2);
5. 排序
vector支持通过sort方法进行排序。函数有一下两种重载形式:
// 按照操作符<进行排序
sort(newStuList.begin(), newStuList.end());
// 按照自定义函数SortString进行排序
sort(newStuList.begin(), newStuList.end(), SortString);
网友评论