我是新的董事會成員。我正在使用MS VS2008。 我正在學習列表的列表。 我正在嘗試將元素添加到作爲列表列表的一部分的列表中。C++:嵌套列表:如何將一個項目添加到列表列表
我在我的程序中注意到我遇到問題。 當我調試它時,「beth」被添加到第二個列表(division2),但是當循環退出時,即使我已經將所有列表聲明在嵌套循環之外,「beth」也不在第二個列表中。
任何幫助將得到更大的讚賞。
下面是代碼:
struct item
{
string name;
int age;
};
int main()
{
list<item> division1;
list<item> division2;
list< list<item> >WholeCompany;
item s;
s.name="sandra"; s.age=43; division1.push_back(s);
s.name="Marc"; s.age=19; division2.push_back(s);
s.name="betty"; s.age=34;division2.push_back(s);
WholeCompany.push_back(division1);
WholeCompany.push_back(division2);
list< list<item> >::iterator WholCompIter;
list<item>::iterator itemIter;
for (WholCompIter = WholeCompany.begin(); WholCompIter != WholeCompany.end(); WholCompIter++)
{
//incorrect
//list<item> listEntry = *WholCompIter;
//instead use:
list<item> listEntry = *WholCompIter;
for (itemIter = listEntry.begin(); itemIter != listEntry.end(); itemIter++)
{
//MY ISSUE IS RIGHT HERE! How can I add the value to the list, but the list forgets it when it exit loop
if(itemIter->name =="betty")
{
item s; s.name="beth"; s.age=65;
listEntry.insert(itemIter,s);//problem is here.
//I have also tried
//listEntry.push_back(s) but the output doesn't show it
}
}
}
//incorrect.
//for(list<item>::iterator i=division2.begin(); i!=division2.end();++i)
// cout<<i->name<<" "<<i->age<<endl;
//instead use:
for (WholCompIter = WholeCompany.begin(); WholCompIter != WholeCompany.end(); WholCompIter++)
{
list<item>listEntry = *WholCompIter;
for (itemIter = listEntry.begin(); itemIter != listEntry.end(); itemIter++)
{
cout<<itemIter->name<<" "<<itemIter->age<<endl;
}
cout<<endl; cout<<endl;
}
return 0;
}
除了本地列表變量的問題外,還要注意在迭代時修改列表可能會使迭代器失效。 – 2012-07-30 05:20:56