对于下面的代码演示,我将一个引用发送到一个类中,并向该 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

注意:确保引用不会无效。

09-26 22:23