取消引用指向对象的指针的std::向量的每个元素
De-Referencing each element of an std::vector of pointers to objects
假设我有一个名为TextEntry
的类,其中包含一些实例变量和一个方法ask()
(返回一个整数(。
然后我创建一个类型为std::vector<TextEntry*> d_text
的向量(类型为TextEntry
的指针的向量(。我希望迭代这个向量中的所有元素,并调用应用于每个元素的方法ask()
。这是正确的方法吗?
for (std::vector<TextEntry*>::iterator it = d_text.begin(); it != d_text.end(); ++it) {
TextEntry* TextEntryPointer = *it; // first dereference the iterator
TextEntry TextEntry = *TextEntryPointer; // dereference the TextEntry pointer
int j = TextEntry.ask();
}
不管出于什么原因,这个实现给了我一个错误,所以如果知道原因是因为上面的代码还是我项目其余部分的其他问题,那将是很有帮助的。
我希望迭代这个向量中的所有元素,并调用应用于每个元素的方法ask((。这是正确的方法吗?
差不多。
您的程序不会在d_text
指向的任何元素上调用ask
,而是在每个指向元素的副本上调用。
我不明白为什么它是一个副本。
您可以创建一个类型为TextEntry
的变量。您可以从*TextEntryPointer
复制初始化它。这就是为什么有一个副本。
有没有一种方法可以在原始元素上调用它?
是的。您可以使用一个引用变量代替复制构建TextEntry
变量:
TextEntry& TextEntry = *TextEntryPointer;
这是指向量中元素所指向的对象。
或者更简单地说,根本不创建中间变量:
int j = TextEntryPointer->ask();
甚至可能不是指针:
int j = (*it)->ask();
你也可以简化这个循环:
for(TextEntry* ptr : d_text) {
int j = ptr->ask();
}
无论出于什么原因,这个实现都会给我一个错误
缺少分号
TextEntry TextEntry = *TextEntryPointer // dereference the TextEntry pointer
PS。避免使用与类型相同的标识符命名变量。
一个带有小假设的示例程序。查看用于调用成员函数的主函数。
#include <iostream>
#include <vector>
using namespace std;
class TextEntry
{
public:
int ask()
{
return 1;
}
};
int main()
{
vector<TextEntry*> te;
TextEntry* te1 = new TextEntry();
TextEntry* te2 = new TextEntry();
TextEntry* te3 = new TextEntry();
TextEntry* te4 = new TextEntry();
te.push_back(te1);
te.push_back(te2);
te.push_back(te3);
te.push_back(te4);
for (std::vector<TextEntry*>::iterator it = te.begin(); it != te.end(); ++it)
{
TextEntry *t = *it;
cout<<t->ask();
}
}
其他答案都是正确的。但我们现在有2016年,所以我们有c++11:
for (auto& text_entry_ptr: d_text)
{
int j = text_entry_ptr->ask();
}
更简单、更干净。
相关文章:
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 在 C++ 中输出枚举类类型的向量元素
- 用向量的向量元素初始化向量的空向量
- 为什么不允许使用可变长度数组作为向量元素?
- 在函数中传递向量元素
- 使用 Rcpp 加速替换迭代算法中的列表和向量元素是否合法?
- 返回向量元素的 l 值的正确方法是什么?
- 当向量增长时,指向向量元素的C++指针是否无效
- 如何在C++中从一个向量元素减去std::unorderede_map向量元素并更新它
- C++:向量元素赋值导致访问冲突
- 将向量元素与字符串元素进行比较,而不初始化向量
- 从2D矢量中找出最小尺寸的向量元素的更好方法
- 当我尝试将一个向量元素的值分配给另一个向量元素时,为什么我的应用程序会崩溃
- 使用递归C++向量元素的总和
- 如何查找为数组中的最低值编制索引的向量元素
- 限制指针访问STL ::向量元素
- 访问索引指向向量元素时的seg故障 - 做错了什么
- 如何使用指针访问向量元素的各个元素
- 向量元素数据损坏了Find()操作
- 将字符值分配给向量元素.C