美文网首页
c++ vector讲解

c++ vector讲解

作者: 小阿牛的爸爸 | 来源:发表于2021-10-19 22:58 被阅读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);
    

    相关文章

      网友评论

          本文标题:c++ vector讲解

          本文链接:https://www.haomeiwen.com/subject/mqdtaltx.html