对于下面的代码演示,我将一个引用发送到一个类中,并向该 vector 中添加一些项目,然后返回该 vector ,我认为主函数的 test = a.return_data()赋值中存在复制问题,有什么方法可以提高效率吗?
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
class A
{
public:
A(vector<int> &a);
void additem(int c);
vector<int> return_data();
private:
vector<int> d;
};
A::A(vector<int> &a)
{
d = a;
}
void A::additem(int c)
{
d.push_back(c);
}
vector<int> A::return_data()
{
return d;
}
void main()
{
vector<int> test;
for(int i=0; i<10; i++)
{
test.push_back(i);
}
cout << test.size() << endl;
A a(test);
a.additem(10);
test = a.return_data();
cout << test.size() << endl;
}
最佳答案
您可以在类(class)中担任引用成员(member),
class A
{
... ...
private:
vector<int>& d;
};
然后使用member initializer lists在ctor中对其进行初始化,
A::A(vector<int> &a) : d(a) {}
然后,不再需要使用
return_data()
,void main()
{
vector<int> test;
for(int i=0; i<10; i++)
{
test.push_back(i);
}
cout << test.size() << endl;
A a(test);
a.additem(10);
// test = a.return_data();
cout << test.size() << endl;
}
LIVE
注意:确保引用不会无效。