C++ c++;自定义类型向量优化
我有一个A类,它有一个私有的int_I成员。我想要n个实例存储在一个向量中。因此,我给了向量一个初始容量。此外,我希望保持具有不同_i值的对象,并在循环中构造具有不同值的对象。相应代码如下:C++ c++;自定义类型向量优化,c++,vector,constructor,temporary,custom-type,C++,Vector,Constructor,Temporary,Custom Type,我有一个A类,它有一个私有的int_I成员。我想要n个实例存储在一个向量中。因此,我给了向量一个初始容量。此外,我希望保持具有不同_i值的对象,并在循环中构造具有不同值的对象。相应代码如下: #include <vector> #include <iostream> using namespace std; class A { public: A( int i = -1 ) { _i = i; cout << "cc " << _i
#include <vector>
#include <iostream>
using namespace std;
class A
{
public:
A( int i = -1 ) { _i = i; cout << "cc " << _i << endl; }
A( const A &other ) { _i = other._i; cout << "ccc " << _i << endl; }
~A() { cout << "dc " << _i << endl; }
int get_i() const { return _i; }
private:
int _i;
};
const int n = 2;
vector<A> v( n );
int main()
{
cout << "---" << endl;
for ( int i = 0; i < n; i++ )
v[i] = A( i );
cout << "---" << endl;
for ( int i = 0; i < n; i++ )
cout << v[i].get_i() << endl;
cin.ignore( 1 );
return 0;
}
output:
cc -1
ccc -1
dc -1
cc -1
ccc -1
dc -1
---
cc 0
dc 0
cc 1
dc 1
---
0
1
实际上,我不知道deafult和临时对象创建是否暴露了性能问题。使用
保留
,而不是调整大小
,来设置容量。然后使用emplace_back
进行就地施工,以避免出现临时情况
vector<A> v;
int main()
{
v.reserve(n)
cout << "---" << endl;
for ( int i = 0; i < n; i++ )
v.emplace_back( 1 );
}
向量v;
int main()
{
v、 储备(n)
不能使用
保留
,而不是调整大小
,以设置容量。然后使用安置(U back)
进行就地施工,以避免临时性的施工
vector<A> v;
int main()
{
v.reserve(n)
cout << "---" << endl;
for ( int i = 0; i < n; i++ )
v.emplace_back( 1 );
}
向量v;
int main()
{
v、 储备(n)
难道那个代码不会生成那个输出吗?准确地说,我认为它随编译器的不同而不同。@BenVoigtNo,我的意思是,代码不会在任何编译器上打印出
-1
。为什么不呢?我发布了real OutputSry,你是对的。我之前编辑的问题做得不对。那个代码不会生成那个输出。准确地说,我认为它随编译器的不同而不同。@BenVoigtNo,我的意思是代码不会在任何编译器上打印出-1
。为什么不呢?我发布了real OutputSry,你是对的。我在上一篇文章中编辑了错误的问题。cc 0 ccc 0 dc 0 ccc 1 ccc 1 dc 1以上是现在的输出。这可以在没有复制构造函数调用的情况下进行吗?@Ian:。你确定你使用了emplace\u back(I)
按照我的建议,而不是向后推(A(I))
或向后推(A(I))
?现在输出的是cc 0 ccc 0 dc 0 cc 1 ccc 1 dc 1Above。这可以不用复制构造函数调用吗?@Ian:。你确定你按照我的建议使用了向后推(I)
,而不是向后推(A(I))
或向后推(A(I)吗)
?