gpt4 book ai didi

c++ - 如何避免调用 vector 中元素的复制构造函数

转载 作者:搜寻专家 更新时间:2023-10-31 02:11:23 25 4
gpt4 key购买 nike

<分区>

在下面的 C++ 示例中:

#include <vector>
#include <string>
#include <iostream>

using namespace std;

struct foo{
foo(int i) : s( to_string(i) ){ cout << "init foo : "+s+"\n"; }
foo(foo&& f) : s( move(f.s) ){ cout << "move foo : "+s+"\n"; }
foo(const foo& f) : s(f.s){ cout << "copy foo : "+s+"\n"; }
string s;
};

int main(){
vector<foo> f;
for(int i=0; i<5; i++){
cout << f.size() << endl;
f.push_back( foo(i) );
}
}

输出是:

0
init foo : 0
move foo : 0
1
init foo : 1
move foo : 1
copy foo : 0
2
init foo : 2
move foo : 2
copy foo : 0
copy foo : 1
3
init foo : 3
move foo : 3
4
init foo : 4
move foo : 4
copy foo : 0
copy foo : 1
copy foo : 2
copy foo : 3

似乎 std::vector 每次更改其capacity 时都会为容器中的所有foo 元素调用复制构造函数。

有没有办法强制使用移动构造函数而不是复制构造函数?

我不知道 vector 的最终大小,所以 vector::reserve 不是一个可能的选择。

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