当我想将数据从堆栈移动到向量时如何避免复制?
How to avoid copy when i want to move data from stack to vector?
我有一个非常常用的操作,需要将数据从堆栈移动到向量中。
让我写一个演示代码:
void handle(const std::vector<std::vector<std::pair<size_t, double>>> & v) { // this is my handle data function
}
int main() {
std::stack<std::vector<std::pair<size_t, double>>> data; // this is my data container, it's a stack
int cnt = 0;
std::vector<std::vector<std::pair<size_t, double>>> params(3);
while (cnt++ < 3) { // assume this handle need 3 data
const auto & v = data.top();
params[cnt] = v; // i think this will involve copy operation
// and in real scene, i need to keep params in order,
// so i cant use emplace back, only can use [i]
data.pop();
}
handle(params);
}
你能帮忙解决这个问题吗?我怎样才能避免复制并加快我的代码速度?
您的代码将创建向量的副本。
const auto & v = data.top();
params[cnt] = v;
这将通过将向量移出data
来避免复制。
auto & v = data.top();
params[cnt] = std::move(v);
两种操作都被描述为形式(1)和(2),in cpprefernce。
我有一个非常常用的操作,需要将数据从堆栈移动到向量中。
让我写一个演示代码:
void handle(const std::vector<std::vector<std::pair<size_t, double>>> & v) { // this is my handle data function
}
int main() {
std::stack<std::vector<std::pair<size_t, double>>> data; // this is my data container, it's a stack
int cnt = 0;
std::vector<std::vector<std::pair<size_t, double>>> params(3);
while (cnt++ < 3) { // assume this handle need 3 data
const auto & v = data.top();
params[cnt] = v; // i think this will involve copy operation
// and in real scene, i need to keep params in order,
// so i cant use emplace back, only can use [i]
data.pop();
}
handle(params);
}
你能帮忙解决这个问题吗?我怎样才能避免复制并加快我的代码速度?
您的代码将创建向量的副本。
const auto & v = data.top();
params[cnt] = v;
这将通过将向量移出data
来避免复制。
auto & v = data.top();
params[cnt] = std::move(v);
两种操作都被描述为形式(1)和(2),in cpprefernce。