在这种情况下,我声明了一个struct Data。
struct Data {
string first;
string middle;
string last;
int age;
};
根据我的说明,我们然后创建一个
vector<Data*> list;
要将项目添加到此列表,我们必须创建新的数据指针并手动设置属性。
Data* variable;
variable=new Data;
list.pushback<variable>
我没有看到使用这种方法的优点。为什么我们不能使用它?
vector<Data> list;
要将项添加到此列表,我创建一个新的Data变量,然后使用
list.pushback<variable>;
我说这两种方法都有效吗?
答案 0 :(得分:1)
首先它必须是
list.push_back(variable)
而不是
list.pushback<variable>
不同之处在于,在案例1中,您创建了一个指向变量的指针,这意味着您只在列表中存储变量的地址。这段代码
#include <string>
#include <vector>
#include <iostream>
using namespace std;
struct Data {
string first;
string middle;
string last;
int age;
};
int main()
{
vector<Data*> list;
Data* variable;
variable = new Data;
list.push_back(variable);
cout << list[0];
cin.get();
return 0;
}
只会返回存储变量的内存中的地址。 因此,要返回一些变量值,您可以使用类似
的内容vector<Data*> list;
Data* variable;
variable = new Data;
variable->setage(5);
list.push_back(variable);
cout << (*list[0]).getage();
cin.get();
return 0;
}
其中* list [0]取消引用指针,这意味着你得到的是值而不是它的地址。
如果你的工作没有指针
vector<Data> list;
Data variable;
list.push_back(variable);
相反,您将在列表中存储变量的副本。
因此,在这种情况下,您可以通过类似
的方式直接处理变量list[0].getage()
如果在struct Data中创建了一个getage()函数。
如果你不知道怎么做,一个简单的(可能不是最好的)方式是添加
public:
int getage(){
return age;
}
void setage(int x){
age = x;
}
};
在你的struct Data。
中