Выделение элементов в векторе C ++ после объявления - PullRequest
5 голосов
/ 07 мая 2011

Пожалуйста, обратитесь к коду и комментариям ниже:

vector<int> v1(10);
cin>>v1[0]; // allowed
cin>>v1[1]; // allowed

// now I want v1 to hold 20 elements so the following is possible:

cin>>v1[15]>>v[19]; // how to resize the v1 so index 10 to 19 is available.

Ответы [ 4 ]

6 голосов
/ 07 мая 2011

Вам просто нужно изменить размер вектора перед добавлением новых значений:

v1.resize(20);
3 голосов
/ 07 мая 2011

Если вы хотите прочитать столько значений из cin, сколько доступно, вы можете использовать диапазон итератора istream_iterator и передать его в конструктор диапазона vector, например:

#include <iterator> // for istream_iterator
#include <vector>
#include <iostream> // for cin

// ...

std::vector<int> v1( (std::istream_iterator<int>( std::cin )), // extra ()
                     std::istream_iterator<int>() );

(дополнительные скобки необходимы для предотвращения "C ++ наиболее неприятный анализ" ).Сртакже Построение вектора с помощью istream_iterators .

2 голосов
/ 07 мая 2011

vector :: resize () изменит его размер и заполнит его построенными объектами по умолчанию (в данном случае int, это не имеет значения).

vector :: reserve () выделит пространство,без заполнения.

Вы можете добавлять дополнительные элементы, используя, например, push_back (), до тех пор, пока у него не будет столько элементов, сколько вы хотите - он изменяет свой размер по мере необходимости.

2 голосов
/ 07 мая 2011

Вы можете использовать изменить размер так:

v1.resize(20);
...