此内容已被省略。不遵守规则。
答案 0 :(得分:0)
输入一维矢量
但是
int rowlength = std::sqrt(in.size());
代码行似乎假设输入实际上是一个方形二维矩阵(即行和列的数目相同),那是什么?如果in向量中的元素数不是一个完美的正方形怎么办?
关于输入的这种混淆很可能会引起您的问题,应先解决该问题,然后再执行其他操作。
答案 1 :(得分:0)
我认为您想要做的是以下事情:
void get_row(int r, const std::vector<int>& in, std::vector<int>& out) {
int rowlength = std::sqrt(in.size());
std::vector<std::vector<int>> temp; // now a 2D vector (vector of vectors)
for(int i = 0; i < rowlength; i++) {
temp.emplace_back(); // for each row, we need to emplace it
for(int j = 0; j < rowlength; j++) {
// we need to copy every value to the i-th row
temp[i].push_back(in[twod_to_oned(i, j, rowlength)]);
}
}
for(int j = 0; j < rowlength; j++) {
// we copy the r-th row to out
out.push_back(temp[r][j]);
}
}
您的解决方案使用std::vector<int>
而不是std::vector<std::vector<int>>
。前者不支持通过[][]
语法访问元素。
您还正在将该向量分配到其边界之外。这导致不确定的行为。始终使用push_back
或emplate_back
添加元素。仅使用operator []
访问当前数据。
最后,将行插入out
向量也是如此。只有您知道out
向量是否包含足够的元素。我的解决方案假定out
为空,因此我们需要push_back
整行。
此外:您可能希望使用std::vector::insert
而不是手动的for()
循环。考虑将第三个循环替换为:
out.insert(out.end(), temp[r].begin(), temp[r].end());
可能更有效,更易读。第一个循环的内部for()
外观也可以用这种方式替换(甚至更好-可以使用从in
向量获得的迭代器放置向量)。我强烈建议您尝试实现这一目标。