检查迭代器的最后一个元素

问题描述:

我有循环象下面这样:检查迭代器的最后一个元素

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. 

有谁请帮助。

+1

可能的重复:http://*.com/questions/151046/how-can-i-detect-the-last-iteration-in-a-loop -over-stdmap – DhruvPathak 2011-12-21 07:22:18

+1

@dhruv。感谢链接。它解决了我的问题。 – Vijay 2011-12-21 07:28:10

尝试

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>