C++数组和 vector 教程

一、引言

在 C++编程中,数组和 vector 都是用于存储一组元素的数据结构。数组是一种固定大小的数据结构,而 vector 是一种动态数组,可以在运行时改变大小。本教程将详细介绍数组和 vector 的使用方法,包括它们的声明、初始化、元素访问、添加元素、删除元素以及常见操作。

二、数组

(一)数组的声明和初始化

数组的大小在声明时确定,且不能更改。可以使用以下方式声明和初始化数组:

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 声明并初始化一个包含 5 个元素的整数数组
    int arr[5] = {1, 2, 3, 4, 5};

    // 部分初始化,未初始化的元素默认为 0
    int arr2[5] = {1, 2};

    // 未初始化的数组,元素的值是未定义的
    int arr3[5];

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

在上述代码中:

  • int arr[5] = {1, 2, 3, 4, 5}; 声明并初始化了一个包含 5 个元素的整数数组。
  • int arr2[5] = {1, 2}; 部分初始化数组,未明确初始化的元素默认为 0。
  • int arr3[5]; 声明了一个未初始化的数组,元素的值是未定义的,可能包含垃圾值。

(二)数组的元素访问

使用 [] 运算符访问数组元素。数组的索引从 0 开始,到 size - 1 结束,其中 size 是数组的大小。

#include <bits/stdc++.h>
using namespace std;

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    // 访问数组元素
    cout << "第三个元素是:" << arr[2] << endl;
    return 0;
}

这里,arr[2] 访问数组 arr 的第三个元素(因为索引从 0 开始)。

(三)修改数组元素

可以通过 [] 运算符修改数组元素的值。

#include <bits/stdc++.h>
using namespace std;

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    // 修改第三个元素
    arr[2] = 10;
    cout << "修改后的第三个元素是:" << arr[2] << endl;
    return 0;
}

arr[2] = 10; 将数组 arr 的第三个元素修改为 10。

(四)多维数组

可以声明和使用多维数组,例如二维数组:

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 声明一个 3x3 的二维数组
    int matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    // 访问二维数组元素
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}

matrix[i][j] 用于访问二维数组 matrix 的元素,其中 i 是行索引,j 是列索引。

三、vector

(一)vector 的声明和初始化

vectorstd 命名空间中的一个类模板,需要包含 <vector> 头文件(但使用 <bits/stdc++.h> 时已包含)。

#include <bits/stdc++.h>
using namespace std;

int main() {
    // 声明并初始化一个 vector
    vector<int> v = {1, 2, 3, 4, 5};

    // 声明一个空的 vector
    vector<int> v2;

    // 声明一个指定大小的 vector,元素默认初始化为 0
    vector<int> v3(5);

    // 声明一个指定大小且元素初始化为 2 的 vector
    vector<int> v4(5, 2);

    // 输出 vector 元素
    for (int i : v) {
        cout << i << " ";
    }
    cout << endl;
    return 0;
}

在上述代码中:

  • vector<int> v = {1, 2, 3, 4, 5}; 声明并初始化了一个包含元素 1, 2, 3, 4, 5 的 vector
  • vector<int> v2; 声明了一个空的 vector
  • vector<int> v3(5); 声明了一个大小为 5 的 vector,元素默认初始化为 0。
  • vector<int> v4(5, 2); 声明了一个大小为 5 的 vector,元素初始化为 2。

(二)vector 的元素访问

使用 [] 运算符或 at() 方法访问 vector 的元素。

#include <bits/stdc++.h>
using namespace std;

int main() {
    vector<int> v = {1, 2, 3, 4, 5};
    // 使用 [] 访问元素
    cout << "第三个元素是:" << v[2] << endl;
    // 使用 at() 方法访问元素
    cout << "第三个元素是:" << v.at(2) << endl;
    return 0;
}

v[2]v.at(2) 都可以访问 vector v 的第三个元素。但 at() 方法会进行边界检查,如果越界将抛出 out_of_range 异常,而 [] 操作符不会。

(三)添加元素到 vector

使用 push_back() 方法向 vector 的末尾添加元素。

#include <bits/stdc++.h>
using namespace std;

int main() {
    vector<int> v;
    // 添加元素
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    // 输出元素
    for (int i : v) {
        cout << i << " ";
    }
    cout << endl;
    return 0;
}

push_back() 方法将元素添加到 vector 的末尾。

(四)删除 vector 中的元素

可以使用 pop_back() 方法删除 vector 的最后一个元素。

#include <bits/stdc++.h>
using namespace std;

int main() {
    vector<int> v = {1, 2, 3, 4, 5};
    // 删除最后一个元素
    v.pop_back();
    // 输出元素
    for (int i : v) {
        cout << i << " ";
    }
    cout << endl;
    return 0;
}

pop_back() 方法会移除 vector 的最后一个元素。

(五)vector 的大小和容量

可以使用 size() 方法获取 vector 的元素数量,使用 capacity() 方法获取 vector 的容量。

#include <bits/stdc++.h>
using namespace std;

int main() {
    vector<int> v = {1, 2, 3, 4, 5};
    cout << "vector 的大小:" << v.size() << endl;
    cout << "vector 的容量:" << v.capacity() << endl;
    return 0;
}

size() 方法返回 vector 中元素的数量,capacity() 方法返回 vector 可容纳元素的数量,可能大于 size()

(六)清空 vector

使用 clear() 方法清空 vector 的元素。

#include <bits/stdc++.h>
using namespace std;

int main() {
    vector<int> v = {1, 2, 3, 4, 5};
    // 清空 vector
    v.clear();
    cout << "清空后 vector 的大小:" << v.size() << endl;
    return 0;
}

clear() 方法会移除 vector 中的所有元素,使其大小变为 0。

四、总结

本教程介绍了 C++中数组和 vector 的使用方法。数组适用于大小固定的元素集合,而 vector 提供了更灵活的动态数组功能,适合大小不确定或需要动态变化的情况。根据不同的需求,可以灵活选择使用数组或 vector。在实际编程中,要注意数组的固定大小和 vector 的动态特性,以及 vector 操作的性能开销(例如,频繁的 push_back() 可能导致重新分配内存)。如果还有其他问题或需要进一步的帮助,请随时联系我。

这个文档涵盖了 C++中数组和 vector 的基本操作和使用方法,包括声明、初始化、元素访问、添加元素、删除元素等,希望能帮助你更好地理解和使用这些数据结构。在编写程序时,根据具体情况选择合适的数据结构,可以提高程序的效率和可维护性。

0 条评论

目前还没有评论...