![](/img/trans.png)
[英]Input integers from fstream to 2d vector< vector<int> > C++
[英]how to read input properly into a 2D vector, vector<vector<int>> in c++
我需要在具有 n 列和 n 行的矩陣上使用vector < vector > int > >
找到每一行的總和。
例如,如果這是輸入,
n = 4
1 2 3 4
1 1 1 2
2 2 41 8
3 3 10 2
output 應該是
10
5
53
18
到目前為止,這是我的代碼:
vector<vector<int>> A;
int n, x;
cin >> n;
for (int i = 0; i < n; ++i)
for(int j = 0; j < n; ++j)
cin >> x, A[i].emplace_back(x);
for(int i = 0 ; i < n ; ++i)
{
int sum = accumulate(A[i].begin(), A[i].end(), 0);
cout << sum << "\n";
}
我也不認為我對矩陣的閱讀很好。
如果您能提供幫助,將不勝感激!
謝謝!
要讀入 2D 向量,您需要為每一行讀入 1D 向量,然后將該 1D 向量添加到 2D 向量中。 你可以這樣做:
for (int i = 0; i < n; ++i)
{
std::vector<int> row;
for(int j = 0; j < n; ++j)
{
cin >> x;
row.push_back(x);
}
A.push_back(row);
}
您甚至可以為整個 2D 向量分配空間,然后直接讀取到正確的位置,如下所示:
auto A = std::vector<std::vector<int>>(n, std::vector<int>(n, 0));
for (int i = 0; i < n; ++i)
for(int j = 0; j < n; ++j)
cin >> A[i][j];
正如評論所建議的那樣,您可以進一步簡化這一點
auto A = std::vector<std::vector<int>>(n, std::vector<int>(n, 0));
for (auto &row : A)
for(auto &element : row)
cin >> element;
您總結行的代碼似乎是合理的。
int n, x;
cin >> n;
vector<vector<int>> A(n);
for (int i = 0; i < n; ++i)
for(int j = 0; j < n; ++j)
cin >> x, A[i].push_back(x);
for(int i = 0 ; i < n ; ++i)
{
int sum = accumulate(A[i].begin(), A[i].end(), 0);
cout << sum << "\n";
}
問題是當向量的向量中沒有向量時,您正在嘗試訪問 A[i]
vector<vector<int>> A ----> {}
vector<vector<int>> A(4) ----->{{}{}{}{}} // constructor initializes with 4 empty vectors
現在您可以訪問返回第 i 個向量 object 的 A[i],您可以在其上執行 push_back 以插入元素
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.