在C++中循环访问自定义结构列表的小问题
Small problem iterating through a list of custom struct in C++
我正在尝试打印出由带有迭代器的结构组成的列表,但我无法这样做,因为迭代器无法指向我的 soldier.index((,我可以知道我做错了什么吗?
我正在得到
[错误] "std::list::iterator"没有名为"index"的成员。
#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
struct Soldier
{
int index;
bool isAlive = true;
};
int main()
{
list<Soldier>company;
list<Soldier>::iterator it;
int N;
int number_of_reports;
cin >> N;
for(int i = 0; i < N; i++)
{
Soldier soldier;
soldier.index = i;
company.push_back(soldier);
}
cin >> number_of_reports;
while(number_of_reports--)
{
for(it = company.begin(); it != company.end(); it++)
{
cout << it.index() << endl;
}
}
return 0;
}
这实际上是一个棘手的问题。我不知道你们班的课程,但我可以看到标准库的介绍有很多细微差别。
迭代器是一个完整的对象。它真的对你的士兵结构一无所知。它知道如何使用包含您的焊料的 std::list。它充满了超载的运算符。在这一点上,我可以看到水变得浑浊的地方。所以你还没有了解运算符重载,但你要使用它吗?您应该像黑匣子一样对待迭代器,因此您必须盲目遵循某些规则。如果是这种情况,您应该被告知迭代器可以访问容器中的对象,并且访问该对象的唯一方法是使用魔术it->thing
。
如果您已经了解了重载,那么应该指出 -> 是一个迭代器重载。 运算符返回指向对象的指针。或者,至少,您可以将迭代器视为原始指针,它看起来是一样的。你被介绍给指针了吗?
而且,正如它已经出现的那样。
for( auto& item : container )...;
是一种语言构造。它只是执行与以下相同的操作:
for (it = company.begin(); it != company.end(); it++)
{
auto& item= *it;
std::cout << item.index << std::endl;
}
它再次将迭代器视为指针,这次使用星号运算符。
https://en.cppreference.com/w/cpp/language/operator_member_access#Built-in_indirection_operator
如果你要成为一名熟练的c ++程序员,你必须学习语言和标准库是如何工作的。
另外,请改掉以下习惯:
using namespace std;
它应该是it->index
而不是it.index()
。
最简洁的方法是使用远程 for 循环:
for (auto& s : company)
{
cout << s.index << endl;
}
现场演示:https://wandbox.org/permlink/ybiYdbGhcQEfYizH
我想你想这样做:
for (list<Soldier>::iterator it = company.begin(); it != company.end(); ++it)
{
cout << it->index << endl;
}
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题
- C++关于ENUM的问题。我得到的响应比枚举列表大
- 替代在python中制作邻接列表与图形问题的字典?(如 C++ 中的 vector<vector<int&g
- 在C++中循环访问自定义结构列表的小问题
- 关于Stroustrup C++书的自动和{}列表问题
- 将值推送到 getter 函数调用的列表中时出现问题
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 在 c++ 中访问列表向量时出现问题
- 有关具有编译错误的操纵列表的问题
- C++:继承和列表函数作为类成员的问题
- C++ 入门加列表:10.9 "顶部"指针问题
- STL链接列表问题
- 初始化列表问题
- DirectX 12-命令列表问题
- CreateHwndRenderTarget参数列表问题
- 初始化列表问题,重点是STD向量
- c++初始化列表问题-错误:试图引用已删除的函数
- 特定于对象的数组列表C++问题
- 模板参数列表问题太少
- 又是一个c++列表问题