Во-первых, вам придется изменить интерфейс.Учитывая два итератора, невозможно вернуться к контейнеру, на который они ссылаются;поэтому, если вы хотите изменить контейнер, вам нужно будет передать на него ссылку, например:
void GUIComponentText::AddAttributes(
std::vector<GUIComponentAttribute*>& attributes )
{
for ( std::vector<GUIComponentAttribute*>::iter = attributes.begin();
iter != attributes.end();
++ iter )
{
// ...
}
}
Сделав это: вставка может сделать недействительными итераторы.Так что это зависит от того, куда вы хотите вставить.Если вы хотите вставить в текущую позицию: std::vector<>::insert
одного элемента возвращает итератор для этого элемента, который был вставлен перед вашим элементом, так что вы можете назначить его своему итератору, настроить (при необходимости) и продолжить:
iter = attributes.insert(iter, newAttribute);
++ iter; // Return to where we were...
Если вы добавляете (push_back
), проблема немного сложнее;вам нужно вычислить смещение, а затем восстановить итератор:
size_t offset = iter - attributes.begin();
attributes.push_back( nweAttribute );
iter = attributes.begin() + offset;
В этом случае, вероятно, проще выполнить итерацию, используя size_t
и []
, а не итератор.