当前位置:首页 C++ > 正文

C++中vector和list的区别

作者:野牛程序员:2023-07-15 13:09:41 C++阅读 2834

在C++中,vectorlist都是标准模板库(STL)中提供的容器,用于存储和操作数据。它们在内部实现和特性上有一些区别,下面是它们的主要区别:

  1. 内部实现:vector是基于动态数组实现的,它在内存中是连续存储的。而list是基于双向链表实现的,它的元素在内存中可以是不连续的。

  2. 访问元素:由于vector是连续存储的,所以可以通过下标(索引)快速访问元素。例如,myVector[2]可以用于访问vector中的第三个元素。而list的元素不是连续存储的,因此不能像vector一样通过下标访问元素。要访问list中的元素,需要使用迭代器(iterators)进行遍历。

  3. 插入和删除操作:由于vector是连续存储的,当在中间位置插入或删除元素时,需要移动后续元素来保持连续性,因此这些操作的时间复杂度为O(n),其中n是元素的数量。而list作为链表结构,插入和删除元素的时间复杂度为O(1),因为只需要调整指针的指向即可。

  4. 动态大小调整:vector可以动态地调整其大小,当元素数量增加时,它可以自动重新分配更大的内存空间来容纳更多元素。而list不需要重新分配内存,因为它使用链表结构,可以直接在链表中添加新节点。

  5. 内存使用:由于vector是连续存储的,所以在存储大量元素时,vector可能会占用比list更多的内存空间。因为list的元素在内存中可以是不连续的。

根据使用场景的不同,选择使用vector还是list会有不同的效果。如果需要频繁地进行随机访问,或者在中间位置进行插入和删除操作较少,那么vector是一个更好的选择。如果需要频繁地进行插入和删除操作,而对随机访问的需求不高,那么list可能更合适。

当需要存储一组学生的成绩时,可以考虑使用vectorlist

  1. 使用vector

#include <iostream>
#include <vector>

int main() {
    std::vector<int> scores;  // 定义一个存储成绩的vector

    // 添加成绩
    scores.push_back(85);
    scores.push_back(92);
    scores.push_back(78);
    scores.push_back(90);

    // 访问成绩
    std::cout << "第一个学生的成绩:" << scores[0] << std::endl;
    std::cout << "第二个学生的成绩:" << scores[1] << std::endl;

    // 删除最后一个学生的成绩
    scores.pop_back();

    // 遍历成绩
    std::cout << "所有学生的成绩:";
    for (int score : scores) {
        std::cout << score << " ";
    }
    std::cout << std::endl;

    return 0;
}
  1. 使用list

#include <iostream>
#include <list>

int main() {
    std::list<int> scores;  // 定义一个存储成绩的list

    // 添加成绩
    scores.push_back(85);
    scores.push_back(92);
    scores.push_back(78);
    scores.push_back(90);

    // 访问成绩
    std::cout << "第一个学生的成绩:" << scores.front() << std::endl;
    std::cout << "第二个学生的成绩:" << std::next(scores.begin(), 1) << std::endl;

    // 删除最后一个学生的成绩
    scores.pop_back();

    // 遍历成绩
    std::cout << "所有学生的成绩:";
    for (int score : scores) {
        std::cout << score << " ";
    }
    std::cout << std::endl;

    return 0;
}

以上示例展示了如何使用vectorlist存储学生成绩,访问元素,删除元素以及遍历元素。根据具体需求和操作特点,选择适合的容器可以提高代码的效率和性能。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击