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

时间:2011-12-21 07:18:17

标签: c++ stl iterator

我有如下循环:

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.

有人可以帮忙。

3 个答案:

答案 0 :(得分:2)

你还没有发布整个代码片段,所以我不确定ppp是什么,但我相信它就像是一对迭代器。 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('-'))+'&';
}

希望有所帮助。

答案 1 :(得分:0)

尝试

end = ppp.second;
std::advance (end, -1);
if (it2 == end) {}

答案 2 :(得分:-1)

假设ppp是多图,你应该通过

获得第一个元素的迭代器
ppp.begin() 

ppp.rbegin() // to get a reverse iterator

在你循环中:

multimap<string,string>::iterator it2 = ppp.first

pp.first不会给出一个迭代器,而是会给出pair助手类pair<string, string>的第一个元素