C++遍历obj列表并更改/修改值
C++ iterate though list of obj and change/modify value
我有一个类Person,它有一个字符串变量表示name,int变量表示age。
在主函数中,我创建了两个人,然后将两个人添加到人员列表中,然后传递到一个函数来更新年龄:
Person p1 = Person("personA", 4) // personA is 4 years old
Person p2 = Person("personB", 6) // personB is 6 years old
list<Person> list1; // create a list of Person
list1.push_back(p1); // push personA to list
list1.push_back(p2); // push perosnB to list
updateAge(list1); // pass to another function to update age
我的问题是,你如何迭代列表中的每一项并更新年龄?我正在考虑创建指针(但不确定)。有人能给我什么提示吗?
如此:
void updateAge(list<Person> & people)
{
for (list<Person>::iterator i = people.begin(); i != people.end(); ++i) {
i->age(i->age() + 1);
}
}
这假设您在Person
:上有如下getter和setter成员
int age() const;
void age(int);
您可以在for
循环中使用i->
前缀访问当前Person
对象的任何成员。因此,如果你有一个public: int age;
成员,你可以这样做:
++(i->age);
注意,我编写的示例函数的参数是list<Person> &
(对列表的引用),而不是list<Person>
(按值列表)。如果不将参数设为引用,则在调用函数时,列表(及其包含的所有Person
对象!)将被复制,并且函数将接收该副本,该副本独立于原始列表。当函数返回时,复制的列表及其内容将被销毁,对复制的列表所做的任何修改都将丢失。
通过引用传递(正如我的示例函数中所做的那样)意味着代码中的people
参数和list1
变量将引用同一列表,因此可以通过另一个变量来观察对一个变量所做的更改。
最简单的方法是:
for ( auto &person : people )
++person.age;
除了那些已经发布的之外,另一个选择是制作一个函数来为一个人做这项工作,然后使用标准算法将其应用于整个列表。
通过这种方式,您可以将list
更改为不同的容器,然后不必更改任何其他代码。或者你可以一次只在列表的一部分上做,以此类推
void update_age(Person &p)
{
++p.age;
}
// ... in another function
std::for_each( people.begin(), people.end(), update_age );
相关文章:
- 有什么方法可以遍历结构吗
- 在循环中按顺序遍历成员变量
- 遍历模板参数
- 在遍历处理程序的向量时注册和注销处理程序
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- 遍历并行数组以确定C++中的最大数字
- 遍历顺序由 std::文件系统directory_iterator给出
- 遍历链表时的无限循环
- 遍历unordered_map向量
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- C++声明双链表,使用两个 for 循环双向遍历列表并打印
- 如何正确地推回然后遍历堆中对象的向量?
- 遍历二维数组的所有子数组
- 如何在可变参数模板函数中遍历可变参数元组?
- 使用迭代器遍历向量并修改内容
- C++链表遍历和修改
- C++遍历obj列表并更改/修改值
- 遍历链表并修改或插入节点C++
- 在修改序列时遍历该序列.使用向量还是列表?c++ STL
- 让static_visitor在遍历Boost递归变量时修改它