1 0 :
|
veclntegers.push_back
|
(1);
|
1 1 :
|
veclntegers.push_back
|
(987);
|
12: veclntegers.push_back (1001);
13:
cout « "The vector contains ";
cout « veclntegers.size (.) « " Elements" « endl;
return 0;
}
Результат
Типичные операции с вектором
|
409
|
Анализ
Метод p u sh _ b a c k (), строки 9 -12, является открытым членом класса v e c to r , встав ляющим объекты в конец динамического массива. Обратите внимание на использование функции s i z e (), которая возвращает количество элементов, содержащихся в векторе.
С++11
Списки инициализации
Язык С++11 предоставляет класс списков инициализации s td :. : i n i t i a l i z e _ l i s t < > , позволяющий создать экземпляр вектора и инициализировать его элементы, как будто это статический массив:
vector veclntegers = {50, 1, 987, 1001}; // альтернатива:
vector vecMorelntegers {50, 1, 987, 1001};
Этот синтаксис сократил бы три строки листинга 17.2. Но все же мы не использовали его, поскольку на момент написания этой книги компилятор M icrosoft Visual C++ 2010 не поддерживал списки инициализации для реализации класса s t d : : v e c to r .
Вставка элементов в определенную позицию с использованием метода insert ()
Метод p u sh b a c k () позволяет вставить элементы в конец вектора. Но что если нуж но вставить элемент в середину? М ногие контейнеры библиотеки STL, включая класс s t d : : v e c to r , предоставляют функцию i n s e r t () со множеством перегруженных версий.
Одна позволяет задать позицию вставки элемента в последовательность:
вставить элемент в начало veclntegers.insert (veclntegers.begin (), 25);
Другая позволяет определить позицию и количество элементов со значением, которое должно быть вставлено:
Вставить в конец 2 числа со значением 45 veclntegers.insert (veclntegers.end (), 2, 45);
Вы можете также вставить содержимое одного вектора в выбранную позицию другого:
Другой вектор, содержащий два элемента со значением 30 vector vecAnother (2, 30);
Вставить два элемента из другого контейнера в позицию [1] veclntegers.insert (veclntegers.begin () +1,
vecAnother.begin (), vecAnother.end ());
Для указании функции i n s e r t () позиции вставки новых элементов, как правило, ис пользуется итератор, возвращаемый функцией b e g in () или en d ().
410 ЗАНЯТИЕ 17. Классы динамических массивов библиотеки STL
СОВЕТ
Этот итератор может быть также возвращен таким алгоритмом STL, как std::find (), применяемым для поиска элемента и последующей вставки другого в эту позицию (вставка сдвинет найденный элемент).
Эти форма метода v e c t o r :: i n s e r t () представлена в листинге 17.3.
Л И С ТИ Н Г 1 7 .3 . Использование функции vector:: insert ()
для вставки элементов в определенную позицию_____________________________________
Do'stlaringiz bilan baham: |