在 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