Есть ли какой-нибудь инстинкт, чтобы узнать, собирается ли метод вернуть вам итератор или пару? - PullRequest
0 голосов
/ 31 мая 2018

Я заметил, что есть ряд методов в C ++, где вы получаете что-то обратно, и его члены доступны через .first и .second, в то время как есть ряд других методов, которые возвращают итератор, где вы должныиспользуйте ->first и ->second.В обоих случаях вы на самом деле просто смотрите на std::pair, но разница в том, есть ли у вас итератор или ссылка на пару.

Есть ли какая-либо интуиция, чтобы узнать, какой из двух высобираются получить.Это особенно плохо при работе с std::map и std::unordered_map.

1 Ответ

0 голосов
/ 31 мая 2018

Я склонен считать итераторы указателями.Когда вы возвращаете итератор, использование составляет iter->first, iter->second и т. Д. Когда вы возвращаете value_type, использование составляет item.first, item.second.

Это ясно, когдаВы перебираете элементы карты.Если вы используете обычный цикл for, вы будете использовать что-то вроде:

std::map<K,V> aMap;

....

std::map<K,V>::iterator iter = aMap.begin();
std::map<K,V>::iterator end = aMap.end();
for ( ; iter != end; ++iter )
{
   // Use iter->first for the key
   // Use iter->second for the value
}

Когда вы используете цикл for, вы будете использовать что-то вроде:

for ( auto const& item : aMap )
{
   // Use item.first for the key
   // Use item.second for the value
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...