insert
Синтаксис:
#include <vector> iterator insert( iterator loc, const T& val ); void insert( iterator loc, size_type num, const T& val ); void insert( iterator loc, input_iterator start, input_iterator end );
Метод insert:
- вставляет val паред loc, возвращая итератор на вставленный элемент,
- вставляет num копий переменной val перед loc, или
- вставляет элементы начиная со start и заканчивая end перед loc.
Вставка элементов в вектор может быть довольно затратна по времени, так как внутри вектор представляет собой массив. Чтобы вставить данные в массив, может потребоваться переместить множество элементов этого массива, а это может занять линейное время. Если вы собираетесь производить множество вставок в вектор и вы заботитесь о скорости программы, возможно, лучше будет использовать контейнер с однонаправленным списком в качестве внутренней структуры данных (контейнер list или deque).
Код в нижеследующем примере использует функцию insert(), чтобы разместить четыре копии символа 'C' в векторе символов:
// Создаем вектор, заполняем его первыми 10 символами алфавита vector<char> alphaVector; for( int i=0; i < 10; i++ ) { alphaVector.push_back( i + 'A' ); } // вставляем четыре символа C в вектор vector<char>::iterator theIterator = alphaVector.begin(); alphaVector.insert( theIterator, 4, 'C' ); // Выводим на экран for( theIterator = alphaVector.begin(); theIterator != alphaVector.end(); ++theIterator ) { cout << *theIterator; }
Этот код выведет:
CCCCABCDEFGHIJ
Во втором примере insert добавляет содержимое одного вектора в конец другого:
vector<int> v1; v1.push_back( 0 ); v1.push_back( 1 ); v1.push_back( 2 ); v1.push_back( 3 ); vector<int> v2; v2.push_back( 5 ); v2.push_back( 6 ); v2.push_back( 7 ); v2.push_back( 8 ); cout << "До, v2 is: "; for( int i = 0; i < v2.size(); i++ ) { cout << v2[i] << " "; } cout << endl; v2.insert( v2.end(), v1.begin(), v1.end() ); cout << "После, v2 is: "; for( int i = 0; i < v2.size(); i++ ) { cout << v2[i] << " "; } cout << endl;
После запуска код выводит:
До, v2 is: 5 6 7 8
После, v2 is: 5 6 7 8 0 1 2 3