在这个特定场景中使用指针的用途是什么?

时间:2014-03-12 10:02:23

标签: c++

在这种情况下,我声明了一个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>;

我说这两种方法都有效吗?

1 个答案:

答案 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。