在 C++ 中初始化二维向量

Muhammad Husnain 2023年10月12日
  1. C++ 中的向量
  2. 在 C++ 中初始化向量
  3. 在 C++ 中访问向量的值
  4. 在 C++ 中初始化二维向量
在 C++ 中初始化二维向量

这个简短的编程教程是关于在 C++ 中使用 2D 向量的。

在进入二维向量之前,我们将首先快速介绍向量及其在 C++ 中的使用。然后,我们将继续讨论多维向量及其使用。

C++ 中的向量

向量的作用与动态数组完全一样,具有在插入或删除元素时自动调整自身大小的附加功能。向量可以存储同质元素(即相似数据类型的元素)。

向量可以通过添加和删除自动调整其容器或存储的大小。

向量的所有成员都存储在内存中。每个下一个元素都与前一个元素相邻,因此可以通过迭代器轻松访问它。

当添加一个新元素时,它被放置在最后,并且每次插入需要不同的时间,因为它首先检查内存是否可用。如果内存不可用,它首先分配一些新内存,然后将元素插入向量中。

另一方面,从最后一个元素移除一个元素需要恒定的时间,因为它不会在每次移除时执行调整大小。

在 C++ 中初始化向量

我们在 C++ 标准模板库 (STL) 中有向量库文件。因此,要使用向量,我们需要为其包含所需的头文件,如下所示:

#include <vector>

要声明向量,请遵循以下语法:

vector<int> v1;

请注意,我们不需要指定向量的大小,因为向量可以在需要时动态自动增长其大小。我们可以使用初始化列表或统一初始化来初始化向量。

这两种方法在下面的示例中进行了演示:

vector<int> vec1 = {21, 22, 23, 24, 25};  // initializer list method
vector<int> vec2{21, 22, 23, 24, 25};     // uniform initialization

如果我们想用相同的值填充整个向量,还有另一种初始化向量的方法。如下所示:

vector<int> vec3(4, 11);

这将初始化一个大小为 4 的向量,所有元素的值将是 11,如下所示:{11,11,11,11}

此外,如果我们在声明向量时没有在向量中输入数据,我们可以稍后使用函数 push_back 添加它。这个函数的语法是:

vec1.push_back(value);

这将插入该值作为向量的最后一个元素。

在 C++ 中访问向量的值

向量中有一些迭代方法。

函数 目的
begin() 该函数返回一个指向向量第一个元素的迭代器指针。
end() 这个函数返回一个指向向量最后一个元素的迭代器指针。
size() 此函数返回向量的总大小,这意味着有多少元素。
at(p) 该函数返回指向向量中位置 p 处元素的指针。
empty() 此函数检查向量是否为空。

以下代码片段演示了这些功能:

#include <iostream>
#include <vector>
using namespace std;

int main() {
  vector<int> vec1;
  for (int j = 1; j <= 5; j++) vec1.push_back(j + 1);
  cout << "Size: " << vec1.size() << endl;
  cout << "Output of begin and end functions: ";
  for (auto a = vec1.begin(); a != vec1.end(); ++a) cout << *a << " ";
  cout << endl;
  cout << "Element at position 3: " << vec1.at(3) << endl;
  return 0;
}

输出:

Size: 5
Output of begin and end functions: 2 3 4 5 6
Element at position 3: 5

在 C++ 中初始化二维向量

与二维数组一样,二维向量也是向量的向量。这样一个向量的每个元素都是一个向量本身。

就像在 Java 锯齿状数组中一样,我们可以在 2D 向量的每个位置都有一个多尺寸向量。这就像一个具有一定数量的行和列的矩阵。

不同之处在于它可以在每行中具有可变数量的列。

声明语法:

vector<vector<int>> vec1{{1, 1, 0}, {0, 2}, {2, 1, 3}};

因为它是一个二维结构,我们需要两个循环来遍历这个向量——一个循环遍历行,内循环遍历列。

for (int a = 0; a < vec1.size(); a++) {
  for (int b = 0; b < vec1[a].size(); b++) cout << v1[a][b] << " ";

确保 size() 函数不返回向量中的元素总数。相反,它返回此向量中的向量总数。

我们还可以通过指定行数和列数来初始化这个向量,如下所示:

int rows = 3;
int columns = 4;
vector<vector<int>> vec1(rows, vector<int>(columns));

让我们看看创建二维向量的完整代码:

#include <iostream>
#include <vector>
using namespace std;

int main() {
  int rows = 3;
  int columns = 4;
  vector<vector<int>> vec(rows, vector<int>(columns));
  for (int a = 0; a < rows; a++)  // loop for initializing the vector
  {
    for (int b = 0; b < columns; b++) {
      vec[a][b] = a * b;
    }
    cout << endl;
  }
  for (int a = 0; a < rows; a++)  // loop for displaying the values of vector
  {
    for (int b = 0; b < columns; b++) {
      cout << vec[a][b] << " ";
    }
    cout << endl;
  }
  return 0;
}

输出:

0 0 0 0
0 1 2 3
0 2 4 6
Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

相关文章 - C++ Vector