C++ векторы не изменяются автоматически при доступе к элементу (с помощью метода operator[]
или at
). Заменить последнюю строку либо
newStart.push_back(array[i]);
или
newStart.resize(start.size() + 1);
newStart[start.size()] = array[i];
(бывший быть более эффективным, поскольку он не по умолчанию инициализировать элемент первого)
Я считаю, Java массивы не auto-resize либо, так что я бы не ожидал, что Java-код тоже будет работать (но он даст исключение, в то время как код C++ заставит демонов вылететь из вашего носа или что-нибудь еще, что неприятно компилятору).
Редактировать: Снова прочитав вопрос, код на самом деле определен, но тем более неправильно.
vector<int> newStart(5); //Doesnt have to be 5, sth not known
Этот оператор создает вектор, который содержит 5 (или любой другой) по умолчанию инициализируется элементы, которые в случае int
равно 0. Таким образом, теперь вы
{0, 0, 0, 0, 0}
Ради примера скажем start
содержит {1, 2, 3, 4, 5, 6, 7}
.
newStart.insert(newStart.end(), start.begin(), start.end());
vector::insert
добавляет новые элементы расширения массива и перемещение следующих элементов по мере необходимости. Вставка перед тем end
, поэтому он будет добавлять к вектору, в результате чего:
{0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7}
Я не думаю, что это то, что вы хотели. Похоже, вам нужна копия старта. Который вы просто создали путем создания копии: vector<int> newStart(start)
.
newStart[start.size()] = array[i];
Теперь newStart
имеет начальные 5 нулей и элементы из start
, так что размер start.size() + 5
и, следовательно, он имеет индекс start.size()
. Это элемент 5 th с конца. Таким образом, в приведенном выше примере, это будет изменять вектор к:
{0, 0, 0, 0, 0, 1, 2, 1, 4, 5, 6, 7}
^
Для добавления пуска [0] до конца, использовать push_back
, как указано выше.
Кроме того, помните, что Java массивы являются ссылочными типами, где присваивание только разделяет ссылку на тот же массив, но C++ векторов являются типами значений, где содержание копируется на уступки.
ERM, делает это Java-код даже работать? (в любом случае: 'vector newStart (start); newStart.push_back (array [i);') –
Вы говорите «последний элемент для другого массива», но я вижу только один массив, называемый 'newStart'. – tadman
Вы не сказали, что ваш код делает или не делает, и я пропустил полностью неправильную инициализацию 'newStart' до заданного размера. Это эквивалентно 'resize', а не' reserve'. –