- 主题:怎么遍历list中的成员的字段。
有一个类
class record
{
public:
string name;
long start;
long end;
};
list<record> allrecord;
遍历它
void print() {
list<record>::iterator iterbegin = allrecord.begin();
list<record>::iterator iterend = allrecord.end();
while (iterend != iterbegin) {
cout << (iterend--)->name << endl;
}
}
老是在while循环里面提示:读取name错误。什么错误的参数啥的。
谢谢。
网上的列子全是list<int>,没有自定义类的。请问该怎么访问元素的成员变量。
--
修改:aYong77 FROM 121.13.218.*
FROM 121.13.218.*
把 iterend-- 改成 --iterend
--
FROM 123.127.36.236
那是老写法。新写法尽可能用ranged for,不用这种了
【 在 aYong77 (aYong77) 的大作中提到: 】
: 有一个类
: class record
: {
: public:
--
FROM 221.220.169.*
没用过rbegin rend吗
【 在 aYong77 的大作中提到: 】
: 有一个类
: class record
: {
: ...................
--
FROM 220.249.162.*
你这代码即使用 list<int> 肯定也报错啊。
iterend 指向的是最后一个元素的下一个元素,也就是个非法位置。
【 在 aYong77 的大作中提到: 】
: 有一个类
: class record
: {
: ...................
--
FROM 120.244.156.*
谢谢各位。
话说 for range,这个怎么倒序 遍历呀。
百度没有结果。
--
FROM 121.13.218.*
如果可以接受,先将容器反转std::reverse
否则的话可以用c++ 20 ranges
没有c++20 可以hack一个reverse adapter
#include <iostream>
#include <ranges>
#include <vector>
template <typename T>
struct reversion_adapter { T& iterable; };
template <typename T>
auto begin (reversion_adapter<T> w) { return std::rbegin(w.iterable); }
template <typename T>
auto end (reversion_adapter<T> w) { return std::rend(w.iterable); }
template <typename T>
reversion_adapter<T> reverse (T&& iterable) { return { std::forward<T>(iterable) }; }
int main() {
std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9};
// c++20
for (const auto &e : std::views::reverse(v)) std::cout << e << " ";
std::cout<<std::endl;
for (const auto &e : std::ranges::reverse_view(v)) std::cout << e << " ";
std::cout<<std::endl;
for (const auto &e : std::ranges::views::reverse(v)) std::cout << e << " ";
std::cout<<std::endl;
// pre-c++20
for (auto&& el: reverse(v)) std::cout << el << ' ';
std::cout<<std::endl;
return 0;
}
【 在 aYong77 的大作中提到: 】
: 谢谢各位。
: 话说 for range,这个怎么倒序 遍历呀。
: 百度没有结果。
--
FROM 45.77.25.*
非要反向遍历的话,有rbegin/rend
【 在 aYong77 (aYong77) 的大作中提到: 】
: 有一个类
: class record
: {
: ...................
--
FROM 123.116.60.233