我有一個非常常用的操作,需要將資料從堆疊移動到向量中。
讓我寫一個演示代碼:
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);
}
你能幫忙解決這個問題,我怎樣才能避免復制和加速我的代碼?
uj5u.com熱心網友回復:
這,您的代碼,將創建向量的副本。
const auto & v = data.top();
params[cnt] = v;
這將通過將向量移出 來避免復制data。
auto & v = data.top();
params[cnt] = std::move(v);
在 cpprefernce中,這兩個操作都被描述為形式 (1) 和 (2) 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/368078.html
上一篇:如何從C 的輸入中獲取特定數字?
