c++ vector讲解

2021-10-19  本文已影响0人  小阿牛的爸爸

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);
上一篇下一篇

猜你喜欢

热点阅读