检查迭代器的最后一个元素
问题描述:
我有循环象下面这样:检查迭代器的最后一个元素
for (multimap<string,string>::iterator it2 = ppp.first;it2 != ppp.second; ++it2)
{
if(it2==ppp.second -1)
str=str+it2->second.substr(0,(it2->second).find('-'));
else
str=str+it2->second.substr(0,(it2->second).find('-'))+'&';
}
我使用的条件如下图所示:
if(it2==ppp.second -1)
检查的最后一个元素,并做一些额外的功能如果我找到最后一个元素。但上述条件不起作用。 扔的我一个错误:
"000001.cc", line 50: Error: The operation "__rwstd::__rb_tree<std::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, __rwstd::__select1st<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>::iterator - int" is illegal.
1 Error(s) detected.
有谁请帮助。
答
尝试
end = ppp.second;
std::advance (end, -1);
if (it2 == end) {}
答
您还没有发布整个代码片段,所以我不知道什么是购买力平价,但我相信这是像一对迭代。 map的迭代器没有定义operator-(int val),所以你不能使用它。不过你可以修复这样的错误:
multimap<string,string>::iterator end_val = ppp.second;
--end_val;
for (multimap<string,string>::iterator it2 = ppp.first;it2 != ppp.second; ++it2)
{
if(it2==end_val)
str=str+it2->second.substr(0,(it2->second).find('-'));
else
str=str+it2->second.substr(0,(it2->second).find('-'))+'&';
}
希望有帮助。
答
假设ppp
是多重映射,你应该
ppp.begin()
或
ppp.rbegin() // to get a reverse iterator
获得迭代器的第一个元素在你的循环:
multimap<string,string>::iterator it2 = ppp.first
pp.first
会不给一个迭代器,相反它会给第一个元素pair
帮手类pair<string, string>
可能的重复:http://stackoverflow.com/questions/151046/how-can-i-detect-the-last-iteration-in-a-loop -over-stdmap – DhruvPathak 2011-12-21 07:22:18
@dhruv。感谢链接。它解决了我的问题。 – Vijay 2011-12-21 07:28:10