HOWTO · C++

在 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