在这个特定的场景中使用指针的用途是什么?
What is the uses of using a pointer in this specific scenario?
在这个场景中,我声明了一个结构体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>;
我说这两种方法都有效吗?
首先必须是
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()
如果在Data结构体中创建getage()函数。
如果你不知道怎么做,一个简单的(也许不是最好的)方法是添加
public:
int getage(){
return age;
}
void setage(int x){
age = x;
}
};
这样更快。对于你的情况,如果你要做
Data variable;
// change properties here
list.push_back(variable);
首先在第一行创建一个结构体Data
,然后在将其压入列表时复制整个结构体。由于结构体比指向它的指针大,因此这样做的计算效率不如直接压入结构体指针。
相关文章:
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用基类指针调用基类的值构造函数的语法是什么?
- C++:Lambda 函数指针转换的用例是什么?
- C++关于指针和使用函数将它们启动到堆的行为究竟是什么?
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 为什么此指针值不能转换为整数的规则是什么?
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 回调和函数指针是什么关系
- 带有'this'的空指针是什么意思?
- 将对象传递给将创建它的函数时,要使用的合适的智能指针是什么
- 与自定义分配器一起使用的最佳唯一指针是什么
- 检测"内存泄漏"时,瓦尔格林德的真实指针是什么?
- 类指针*是什么意思
- 指向指针的指针是什么意思
- c语言中的远函数指针是什么,它的语法是什么
- 与指针向量一起使用的最佳智能指针是什么
- a=&*A 在 C++(其中 A 是指针)是什么意思?
- C++中的富指针是什么