[英]C++ copying multidimensional vector
我在復制多維向量時遇到問題,我嘗試了很多方法,但這是最后一個:
vector < vector < int > > a;
vector < vector < int > > b;
a.resize(10);
b.resize(10);
a[0][0] = 123;
copy( a.begin(), a.end(), back_inserter(b) );
cout << b[0][0];
我正在嘗試做一個遞歸循環,計算網格中 10 次移動中所有可能的路線。 我正在嘗試創建一個名為current_path
的向量,它將保存每個遞歸的當前路徑,當current_path
有 10 次移動時,它會將數據從current_path
復制到all_paths
。
網格是這樣的:
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
您只能移動到您觸摸的方格,因此從 0 您可以移動到 1、4 和 5。從 1 到 3、4、5、6 等。
主要思想是將current_path
復制到下一個函數調用(遞歸),以便將curren_path
保持到那個點,直到它滿為止(10 步)。 從current_path
復制到all_paths
我想我必須刪除current_path
?
我知道如何有效地計算所有步驟,但是我在復制current_path
遇到了麻煩, all_paths
在我執行 10 個步驟時如何將current_path
添加到all_paths
?
您的代碼存在一些問題。 在第 4 行的末尾,您有兩個向量,每個向量包含 10 個空向量。 你可以像這樣想象它:
a = {{}, {}, {}, {}, {}, {}, {}, {}, {}, {}}
b = {{}, {}, {}, {}, {}, {}, {}, {}, {}, {}}
這些內部向量仍然沒有任何元素,因此當您嘗試將a[0][0]
為123
,您正在訪問一個不存在的元素,從而調用未定義的行為。
如果這樣做有效,您使用std::copy
將簡單地從a
復制每個向量並將其推送到b
的后面。 因為b
已經有 10 個元素,所以它現在有 20 個元素。
然后嘗試輸出b[0][0]
不存在絲毫不亞於a[0][0]
確實沒有。
這里的解決方案是簡單地使用std::vector
定義的復制賦值運算符:
vector<vector<int>> a = {{1, 2, 3}, {4, 5}};
vector<vector<int>> b;
b = a;
這是您的代碼的固定版本:
vector < vector < int > > a;
vector < vector < int > > b;
a.resize(10, vector < int >(10));
b.resize(10, vector < int >(10));
a[0][0] = 123;
b = a;
cout << b[0][0];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.