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

c++vector和array的区别

作者:野牛程序员:2023-07-22 11:17:41 C++阅读 2695

C++中的vectorarray都是用来存储一组元素的数据结构,但它们之间有一些关键的区别,主要包括以下几个方面:

  1. 动态大小 vs. 静态大小:

    • vector是动态大小的容器,可以根据需要动态增加或减少其大小。当元素数量超过容器当前大小时,vector会自动进行内存扩展。

    • array是静态大小的容器,创建时需要指定固定大小,之后无法改变。如果需要更改大小,需要重新创建一个新的数组。

  2. 存储位置:

    • vector通过动态分配内存在堆上存储元素,这意味着可以灵活地管理内存,但也会导致更多的开销。

    • array在栈上或静态存储区分配内存,使得访问速度更快,但数组大小固定,如果数组很大可能会导致栈溢出。

  3. 复制和移动行为:

    • vector的复制和移动相对较昂贵,因为它涉及到动态内存的重新分配和数据复制。

    • array的复制和移动是简单的位复制,因为它是静态分配的。

  4. 接口和功能:

    • vector提供了丰富的成员函数和功能,例如动态添加、删除元素、自动扩容、访问元素的方法等。

    • array是一种较为基本的容器,提供的功能较少,只支持数组的基本操作。

  5. 容器的适用场景:

    • 使用vector时,你通常不需要预先知道容器的大小,因为它可以根据需要动态调整大小。它适用于处理元素数量可能变化的情况。

    • array适用于已知大小的情况,特别是在编译时知道大小的情况。它在需要固定大小且性能较高的情况下表现较好。

在选择使用vector还是array时,要考虑到你的具体需求,包括容器大小是否可变、性能要求以及内存管理方面的考虑。

当使用C++中的vectorarray时,以下是一些具体的例子,帮助说明它们之间的区别和用法:

例子1:使用vector

#include <iostream>
#include <vector>

int main() {
    // 创建一个空的vector来存储整数
    std::vector<int> myVector;

    // 添加元素到vector中
    myVector.push_back(10);
    myVector.push_back(20);
    myVector.push_back(30);

    // 访问和修改vector中的元素
    std::cout << "第一个元素: " << myVector[0] << std::endl; // 输出: 第一个元素: 10
    myVector[1] = 25;

    // 遍历vector中的元素
    for (int num : myVector) {
        std::cout << num << " "; // 输出: 10 25 30
    }
    std::cout << std::endl;

    // 获取vector的大小
    std::cout << "Vector的大小: " << myVector.size() << std::endl; // 输出: Vector的大小: 3

    return 0;
}

例子2:使用array

#include <iostream>
#include <array>

int main() {
    // 创建一个存储5个整数的array
    std::array<int, 5> myArray = {1, 2, 3, 4, 5};

    // 访问和修改array中的元素
    std::cout << "第一个元素: " << myArray[0] << std::endl; // 输出: 第一个元素: 1
    myArray[3] = 8;

    // 遍历array中的元素
    for (int num : myArray) {
        std::cout << num << " "; // 输出: 1 2 3 8 5
    }
    std::cout << std::endl;

    // 获取array的大小(在编译时已知)
    std::cout << "Array的大小: " << myArray.size() << std::endl; // 输出: Array的大小: 5

    return 0;
}

注意,在上述例子中,vector允许动态添加元素,并且大小可以在运行时更改,而array在创建时需要指定固定大小,无法在运行时更改。另外,由于vector的动态分配内存,它的大小可以根据添加的元素数量而增加。而array的大小在编译时已经确定,不能改变。


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

最新推荐

热门点击