【发布时间】:2018-07-22 13:11:11
【问题描述】:
这是将行(矩阵)附加到矩阵的方式吗?
#include <vector>
#include <memory>
using std::vector;
int size = 4; // width;
int chunk = 2; // high
int main(int argc, char const *argv[]) {
vector<vector<int>> m(10, vector<int>(size));
auto func = []() {
vector<vector<int>> n(chunk, vector<int>(size));
return n;
};
int j = 0;
for(int i = 0; i < 5; i++) {
auto n = func();
for(auto &row : n) m[j++] = row; // append rows
}
}
我希望可以只使用m.push_back(n)。
【问题讨论】:
-
是的,但逐行:
m.push_back(n[0]); m.push_back(n[1]); ... -
总是逐行?没有单发?
-
注释说“追加行”,但代码实际上用新行替换了现有行。整个循环是一个非常复杂的无操作 -
m最终处于与之前完全相同的状态。你又想达到什么目的? -
您显示的是,只需将所有内容从
n复制到m。如果这是您的意图,您为什么不简单地:m = std::move(func());?然后也避免了对m的额外分配。 -
好吧,我必须做 5 次,每次在 m 中加载(转移/移动)2 行。