проверить последний элемент итератора - PullRequest
0 голосов
/ 21 декабря 2011

У меня для цикла, как показано ниже:

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 ]

2 голосов
/ 21 декабря 2011

Вы не опубликовали весь фрагмент кода, поэтому я не уверен, что такое 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('-'))+'&';
}

Надеюсь, это поможет.

0 голосов
/ 21 декабря 2011

Предполагая, что ppp является мультикартой, вы должны получить итератор для первого элемента с помощью

ppp.begin() 

или

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

В вашем цикле:

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

pp.first не даст итератор, вместо этого он даст первый элемент pair вспомогательного класса pair<string, string>

0 голосов
/ 21 декабря 2011

Попробуйте

end = ppp.second;
std::advance (end, -1);
if (it2 == end) {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...