为什么下面的矢量大小为0?
#include <iostream>
#include<vector>
using namespace std;
class A
{
public:
vector<int> T;
const vector<int>& get(){
return T;
}
void print(){
cout<< " size is "<<T.size();
// cout<<" \nelements are %d "<<T[0];
}
};
int main()
{
cout << "Hello World" << endl;
A ob;
vector<int> temp = ob.get();
temp.clear();
temp.push_back(3);
temp.push_back(5);
ob.print();
return 0;
}
答案 0 :(得分:4)
因为没有发生任何事情。它仍然是空的。
您在temp
中复制了该向量,并修改了副本,而不是原始的类成员。您应该使用参考:
vector<int> &temp = ob.get();
由于您要从get()
返回引用,因此必须将其指定给引用。如果你不这样做,那你就只是复制了这个对象。
编辑:此外,更改get()
以返回可变引用,而不是const
引用。
答案 1 :(得分:3)
您没有修改vector
课程内的A
。 get()
会返回一个( const!)引用,然后您将其分配给非引用变量,因此 copy 正在创建vector
。然后,您正在修改副本,但打印出原始文件。
你需要这样做:
#include <iostream>
#include <vector>
using namespace std;
class A
{
public:
vector<int> T;
vector<int>& get(){
return T;
}
void print(){
cout << " size is " << T.size();
// cout << " \nelements are %d " << T[0];
}
};
int main()
{
cout << "Hello World" << endl;
A ob;
vector<int> &temp = ob.get();
temp.clear();
temp.push_back(3);
temp.push_back(5);
ob.print();
return 0;
}
答案 2 :(得分:2)
两个问题。
首先,您的A::get()
方法返回对其成员的const引用。您不能通过const引用修改向量。
其次,您正在修改temp
向量,它只是返回值的副本。