请问为什么后一个人的信息打印不出来只有前一个人的
void test02()
{
vector<Person>v;
char nameSeed[3][2] = { "A","B","C" };
srand((unsigned int)time(NULL));
for (int i = 0; i < 3; i++)
{
int age = rand() % 100 + 1;
v.push_back(Person((const char*)nameSeed[i], age));
}
v.push_back(Person("C", 0));
for_each(v.begin(), v.end(),MyPrint());
vector<Person>::iterator it = adjacent_find(v.begin(), v.end());
cout << "相邻重复元素姓名为" << it->m_Name<<" " <<"年龄为"<<it->m_Age<< endl;
cout << "相邻重复元素姓名为" <<( it+1)->m_Name<<" " <<"年龄为"<<(++it)->m_Age<< endl;
}
问题出在以下这行代码:
cout << "相邻重复元素姓名为" <<( it+1)->m_Name<<" " <<"年龄为"<<(++it)->m_Age<< endl;
在这里,你先使用 (it+1)->m_Name
访问了 it+1
指向的 Person
对象的姓名,然后通过 ++it
将 it
指向了下一个 Person
对象,再访问了其年龄。这样的操作是不正确的,因为在 ++it
之前,it
已经指向了下一个元素,而不是当前元素的下一个元素。因此,你访问的是当前元素的下一个元素的姓名和年龄,而不是相邻重复元素的姓名和年龄。
为了解决这个问题,你可以使用 it
的拷贝来访问当前元素和下一个元素,例如:
vector<Person>::iterator it = adjacent_find(v.begin(), v.end());
cout << "相邻重复元素姓名为" << it->m_Name << " " << "年龄为" << it->m_Age << endl;
cout << "相邻重复元素姓名为" << (it+1)->m_Name << " " << "年龄为" << (it+1)->m_Age << endl;
这样,你就可以正确地访问相邻重复元素的姓名和年龄了。