gpt4 book ai didi

c++ - 将 make_move_iterator 与 vector::insert 一起应用是否有意义?(C++)

转载 作者:太空宇宙 更新时间:2023-11-04 13:38:09 30 4
gpt4 key购买 nike

我有一个 vector 的 vector ,我想将它们一个接一个地连接起来形成一个长 vector 。这可以通过在末尾插入来完成。灵感来自 this question ,我在想,使用 make_move_iterator 会用 move 代替 copy,这样会更有效率。但是下面的测试证明make_move_iterator会造成较大的时间消耗。

#include <iostream>
#include <string>
#include <vector>
#include <chrono>
using namespace std;

int main()
{
string a = "veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryverylongstring";
vector<string> b(10,a);
vector<vector<string> > c(1000,b);
vector<string> d,e;

auto t1 = chrono::system_clock::now();
for(auto& item : c)
{
d.insert(d.end(),item.begin(),item.end());
}
cout << c[0][0].length() << endl;

auto t2 = chrono::system_clock::now();
for(auto& item:c)
{
e.insert(e.end(), std::make_move_iterator(item.begin()),std::make_move_iterator(item.end()));
}

auto t3 = chrono::system_clock::now();
cout << chrono::duration_cast<chrono::nanoseconds>(t2-t1).count() << endl;
cout << chrono::duration_cast<chrono::nanoseconds>(t3-t2).count() << endl;
cout << c[0][0].length() << endl;
cout << "To check that c has been moved from." <<endl;
}

//Output:
//122
//1212000
//1630000
//0
//To check that c has been moved from.

所以我想知道,这种做法真的有助于提高效率吗?

最佳答案

问题描述中的测试是在cpp shell上进行的

我后来试过 ideone事实证明,make_move_iterator 显然效率更高。所以这似乎是一个依赖于编译器的东西。

122
320576
98434
0
To check that c has been moved from.

关于c++ - 将 make_move_iterator 与 vector::insert 一起应用是否有意义?(C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28839550/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com