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

c++vector和数组的区别

作者:野牛程序员:2023-07-22 11:27:54 C++阅读 2859

C++ vector 和数组(array)是两种数据结构,它们有一些重要的区别:

  1. 动态大小 vs. 固定大小:

    • 数组是静态数据结构,一旦创建后,其大小就固定不变,无法动态调整数组的长度。

    • vector 是动态数组,它可以根据需要动态调整大小。当元素数量增加时,vector 会自动重新分配内存,以容纳更多的元素。

  2. 内存管理:

    • 数组的内存管理是手动的。您需要在使用数组之前知道它的大小,并在栈或堆上分配足够的内存空间。数组在栈上分配时大小固定,而在堆上分配时可以动态确定大小。

    • vector 通过使用动态内存分配来管理其元素,当元素数量增加或减少时,它会自动处理内存的分配和释放。

  3. 拷贝和传递:

    • 当传递数组给函数时,实际上是传递了指向数组首元素的指针,而没有传递数组的大小。因此,在函数中使用数组时,必须同时传递数组大小,或者使用结束标记(例如,以NULL结尾的字符数组)。

    • vector 作为一个类对象,传递给函数时,会复制整个 vector 对象,包括其大小和内容。这样,函数内部就可以直接访问 vector 的属性和元素,无需额外传递大小信息。

  4. STL 支持:

    • vector 是标准模板库(STL)的一部分,提供了许多方便的方法和算法,使其易于使用和操作。

    • 数组没有像 vector 那样丰富的成员函数和算法,需要手动编写循环来进行元素的插入、删除等操作。

  5. 访问范围检查:

    • 数组通常没有范围检查,意味着您可以越界访问,这可能导致未定义的行为或程序崩溃。

    • vector 会在访问元素之前检查索引的有效性,如果索引越界,会抛出 std::out_of_range 异常。

在大多数情况下,vector 更加灵活且易于使用,尤其在需要动态大小、较多的数据操作和STL支持的场景下。然而,数组在某些特定场景下仍然有其用处,特别是当需要固定大小的数据结构且性能要求较高时。

当涉及到不同情况时,让我们举几个例子来说明 vector 和数组的区别:

例子1:动态大小 vs. 固定大小

#include <iostream>
#include <vector>

int main() {
    // 使用数组,固定大小为5
    int arr[5] = {1, 2, 3, 4, 5};

    // 使用 vector,初始为空,之后可以动态添加元素
    std::vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
    vec.push_back(4);
    vec.push_back(5);

    // 动态添加元素到 vector
    vec.push_back(6);

    // 输出数组元素
    std::cout << "Array: ";
    for (int i = 0; i < 5; ++i) {
        std::cout << arr[i] << " ";
    }

    // 输出 vector 元素
    std::cout << "\\nVector: ";
    for (int i = 0; i < vec.size(); ++i) {
        std::cout << vec[i] << " ";
    }

    return 0;
}

例子2:传递给函数

#include <iostream>
#include <vector>

// 使用数组,同时传递数组大小
void printArray(int arr[], int size) {
    for (int i = 0; i < size; ++i) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
}

// 使用 vector,直接传递整个 vector
void printVector(std::vector<int>& vec) {
    for (int i = 0; i < vec.size(); ++i) {
        std::cout << vec[i] << " ";
    }
    std::cout << std::endl;
}

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    std::vector<int> vec = {1, 2, 3, 4, 5};

    std::cout << "Array: ";
    printArray(arr, 5);

    std::cout << "Vector: ";
    printVector(vec);

    return 0;
}

例子3:STL 支持

#include <iostream>
#include <vector>
#include <algorithm> // STL 算法头文件

int main() {
    // 使用 vector
    std::vector<int> vec = {5, 2, 9, 1, 7};

    // 使用 STL 算法对 vector 进行排序
    std::sort(vec.begin(), vec.end());

    // 输出排序后的 vector
    std::cout << "Sorted Vector: ";
    for (int i = 0; i < vec.size(); ++i) {
        std::cout << vec[i] << " ";
    }

    return 0;
}

这些例子展示了 vector 在动态大小、传递给函数和STL支持方面的优势。对于数组,您需要手动管理大小,使用指针传递和实现排序等操作。而 vector 可以自动管理大小,直接传递给函数,并且可以使用STL算法来简化对其元素的操作。


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

最新推荐

热门点击