Как определить размер вектора во время выполнения? - PullRequest
4 голосов
/ 17 декабря 2011

Во время выполнения можно определить размер vector?

Например,

Ввод: 25 //, который показывает размер вектора

  code :
        int N ;
        cin << N ;
        vector <int> data[N];

Ответы [ 4 ]

13 голосов
/ 17 декабря 2011

Два метода, которые могут вас заинтересовать:

  • std::vector<T>::size вернет количество элементов в вашем векторе.

  • std::vector<T>::capacity вернет количество элементов, для которых вектор выделил память.

Пример фрагмента

  std::vector<int> v;

  for (int i =0; i < 25; ++i)
    v.push_back (i);

  v.reserve (100); 

  std::cerr << "Elements: " << v.size     () << std::endl;
  std::cerr << "Capacity: " << v.capacity () << std::endl;

выход

Elements: 25
Capacity: 100

Я предполагаю, что ваш пример фрагмента в исходном сообщении содержит хотя бы одну опечатку, вы не объявляете std::vector<int> с N элементами, написав ниже.

То, что вы написали, это то, что данные представляют собой массив размером vector<int> N, и он будет компилироваться, если N было известно во время компиляции (или если в вашем компиляторе присутствовало расширение массива переменной длины).

vector<int> data[N];

Чтобы создать vector и заставить его вставлять N элементы с самого начала:

std::vector<int> data (N);
9 голосов
/ 17 декабря 2011

Вы используете vector (вероятно) неправильным образом ... таким образом, вы определяете массив из N векторов в стиле C (кстати, этот синтаксис не является стандартным, так как нужно знать N во время компиляции), хотя вы, вероятно, захотите определить vector, содержащий N элементы, что делается следующим образом:

vector<int> data(N);

(который вызывает однопараметрический конструктор vector, который создает инициализированный по умолчанию массив N элементов длиной)

Чтобы получить его размер во время выполнения 1 , вам просто нужно вызвать его метод size():

cout<<"The vector contains "<<data.size()<<" elements.\n"
<ч />
  1. На самом деле не имеет смысла спрашивать его размер во время компиляции, поскольку размер vector (подразумевается как количество элементов, хранящихся в нем) определяется только во время выполнения.
3 голосов
/ 17 декабря 2011

Вы почти там:

используйте

vector <int> data(N); 

вместо

vector <int> data[N];

Если вам нужно установить для всех элементов вашего вектора значение, отличное отноль, скажем, -1, используйте vector <int> data(N, -1);

2 голосов
/ 17 декабря 2011

Маттео верно.Просто чтобы добавить к его ответу.Вам не обязательно определять размер вектора во время выполнения.Я предполагаю, что вы используете c ++.

Вы можете просто написать

vector<int> data;

, а затем каждый раз, когда вы хотите добавить элемент в конец вектора, просто выполните

data.push_back(<some integer>)

Это не похоже на массив, где вам нужно дать им размер перед использованием.Векторы могут динамически расти и уменьшаться.Таким образом, вам не нужно заботиться о распределении памяти.Он обрабатывается компилятором и классом vector во время выполнения.

...