我正在嘗試創建矩陣的轉置 - 通過遍歷二維向量并相應地分配索引值。
[[2, 4, 6], [6, 8, 9]] --> [[2,6], [4, 8], [6, 9]] // transpose matrix representation
這是我的代碼
vector<vector<int>> transpose(vector<vector<int>>& matrix) {
vector<vector<int>> result = {};
for (size_t i = 0; i < matrix.size(); i )
{
for (size_t j = 0; j < matrix[0].size(); j )
{
int element = matrix[i][j];
result[j][i].push_back(element); // error occurs here
}
}
return result;
}
在使用適當的主體呼叫函式時 - 我在呼叫push_back成員函式時遇到錯誤。
錯誤資訊
transpose_matrix.cpp:11:30: error: request for member 'push_back' in '(& result.std::vector<std::vector<int> >::operator[](j))->std::vector<int>::operator[](i
', which is of non-class type '__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type' {aka 'int'}
11 | result[j][i].push_back(element);
| ^~~~~~~~~
如果您有任何替代建議,那么它也會有所幫助。
uj5u.com熱心網友回復:
result[j][i]不是一個vector,是一個int。此外,您必須至少將 調整為vector轉置矩陣中的行數(等于輸入矩陣中的列數)。
#include <iostream>
#include <vector>
std::vector<std::vector<int>> transpose(std::vector<std::vector<int>>& matrix)
{
std::vector<std::vector<int>> result;
if (matrix.empty())
return result;
result.resize(matrix[0].size());
for (size_t i = 0; i < matrix.size(); i )
{
for (size_t j = 0; j < matrix[0].size(); j )
{
int element = matrix[i][j];
result[j].push_back(element);
}
}
return result;
}
int main()
{
std::vector<std::vector<int>> v{
{1,2},
{2,3},
{3,4}
};
auto res = transpose(v);
for (auto const& row : res)
{
for (auto ele : row)
std::cout << ele << " ";
std::cout << std::endl;
}
}
uj5u.com熱心網友回復:
result[j][i].push_back(element)指向 a 中的整數值vector<vector<int>>,并且整數沒有方法“push_back”,這是錯誤的原因
您可以:
result[j][i] = element;
覆寫 j,i 位置的元素(注意向量的大小,所以你不要嘗試將元素寫出它的邊界)或者只是
result.push_back(element);
在vector<vector<int>>
uj5u.com熱心網友回復:
解決了錯誤
該錯誤是由于對向量和 int 的錯誤解釋引起的 -result[j][i] is an integer not a vector
解決這個問題后 - 調整空向量串列的大小還有另一個問題。為了避免這種情況 - 我最終在宣告它時分配了向量大小。這解決了整個問題。-vector<vector<int>> res(matrix[0].size(), vector<int>(matrix.size(), 0));
進一步解釋 - 如果主矩陣有
m*n維度,那么它的轉置必須有n*m維度
整體解決方案
vector<vector<int>> transpose(vector<vector<int>> &matrix)
{
// Here assigning the empty matrix caused error while runtime
vector<vector<int>> res(matrix[0].size(), vector<int>(matrix.size(), 0));
for (int i = 0; i < matrix.size(); i )
{
for (int j = 0; j < matrix[0].size(); j )
{
// Assigning the elements to transpose matrix
res[j][i] = matrix[i][j];
}
}
return res;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/485818.html
上一篇:for回圈C 內外的值不同
下一篇:如何在python中比較串列
