Я нашел в посте, как удалять элементы из контейнера с помощью итератора. Во время итерации:
for(auto it = translationEvents.begin(); it != translationEvents.end();)
{
auto next = it;
++next; // get the next element
it->second(this); // process (and maybe delete) the current element
it = next; // skip to the next element
}
Почему auto
используется без типа в auto next = it;
?
Я использую VS10, а не C ++ 11!
auto
имеет другое значение в C ++ 11, чем раньше. В более ранних стандартах, auto
был спецификатором хранения для продолжительности автоматического хранения — типичное хранилище, в котором объект находится там, где он уничтожается в конце своей области видимости. В C ++ 11 auto
Ключевое слово используется для вывода типа переменных. Тип переменной выводится из выражения, используемого для ее инициализации, почти так же, как параметры шаблона могут быть выведены из типов аргументов функции-шаблона.
Этот вывод типа полезен, когда печатание уродливых длинных типов не имеет смысла. Часто тип очевиден из инициализатора. Это также полезно для переменных, тип которых может зависеть от того, в каком экземпляре шаблона он появляется.
Многие функции C ++ 11 поддерживаются по умолчанию в VC10 и auto
это один из них.
Это сокращение в новых версиях C ++, которое позволяет нам избежать неуклюжих обозначений итераторов, поскольку компилятор может определить, каким должен быть реальный тип.
Это называется Вывод типа, смотрите также этот вопрос для деталей. Новое в C ++ 11 и предназначено для упрощения многих длинных и ненужных кодов, особенно для итераторов и привязок функций.
Это называется вывод типа. Тип автоматической переменной определяется типом инициализатора.
Например, это уменьшает количество типов для больших и сложных типов шаблонов.