📜  C++中向量优于数组的优点(1)

📅  最后修改于: 2023-12-03 14:39:56.529000             🧑  作者: Mango

C++中向量优于数组的优点

在C++中,向量(Vector)和数组(Array)都是用于存储多个相同类型的元素的数据结构。但是,向量相对于数组有许多优势,下面我们来看一下向量相对于数组的优点。

动态大小

数组在定义时就需要指定其大小,而且大小是固定的,不能在程序运行时更改。但是,向量的大小可以在程序运行时根据需要动态增加或减少。这是因为向量在内部动态分配和管理内存,所以可以灵活地调整大小。

以下是向量大小的动态调整示例:

#include <vector>
#include <iostream>

using namespace std;

int main()
{
    vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);

    vec.resize(5);            // 调整向量大小为5个元素
    vec[3] = 4;
    vec[4] = 5;

    for (int i = 0; i < vec.size(); i++)
    {
        cout << vec[i] << " ";
    }
    cout << endl;

    vec.resize(3);            // 调整向量大小为3个元素

    for (int i = 0; i < vec.size(); i++)
    {
        cout << vec[i] << " ";
    }
    cout << endl;

    return 0;
}

输出:

1 2 3 4 5
1 2 3
动态分配内存

数组在定义时就需要分配内存,如果数组大小过大,可能会导致栈溢出或堆溢出的问题。而向量在内部动态分配内存,所以可以避免内存溢出的问题。

以下是向量动态分配内存的示例:

#include <vector>
#include <iostream>

using namespace std;

int main()
{    
    vector<int> vec;
    for (int i = 0; i < 100000000; i++)
    {
        vec.push_back(i);
    }

    for (int i = 0; i < 10; i++)
    {
        cout << vec[i] << " ";
    }
    cout << endl;

    return 0;
}

输出:

0 1 2 3 4 5 6 7 8 9
方便的元素访问

向量提供了可以像数组一样随机访问元素的功能,同时又提供了更加方便的元素访问方式,比如迭代器、for-each循环等。以下是一些元素访问示例:

#include <vector>
#include <iostream>

using namespace std;

int main()
{    
    vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);

    // 随机访问元素
    cout << vec[0] << endl;
    cout << vec[1] << endl;
    cout << vec[2] << endl;

    // 使用迭代器访问元素
    for (vector<int>::iterator it = vec.begin(); it != vec.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;

    // 使用for-each循环访问元素
    for (int i : vec)
    {
        cout << i << " ";
    }
    cout << endl;

    return 0;
}

输出:

1
2
3
1 2 3
1 2 3
支持拷贝和赋值操作

向量可以像普通变量一样进行拷贝和赋值操作,而数组在拷贝和赋值时会涉及到指针操作,可能导致内存错误。以下是一些拷贝和赋值示例:

#include <vector>
#include <iostream>

using namespace std;

int main()
{    
    vector<int> vec1;
    vec1.push_back(1);
    vec1.push_back(2);
    vec1.push_back(3);

    // 拷贝向量
    vector<int> vec2 = vec1;
    vec2[0] = 4;
    vec2.push_back(5);

    for (int i : vec1)
    {
        cout << i << " ";
    }
    cout << endl;

    for (int i : vec2)
    {
        cout << i << " ";
    }
    cout << endl;

    // 赋值向量
    vector<int> vec3;
    vec3 = vec1;
    vec3[0] = 6;
    vec3.push_back(7);

    for (int i : vec1)
    {
        cout << i << " ";
    }
    cout << endl;

    for (int i : vec3)
    {
        cout << i << " ";
    }
    cout << endl;

    return 0;
}

输出:

1 2 3
4 2 3 5
1 2 3
6 2 3 7

综上所述,使用向量相对于数组具有更加灵活方便的功能和更加安全的内存管理方式,因此我们应该在C++程序中优先选择向量而不是数组。