В C ++ у меня есть функция, которая должна разбивать вектор на последний элемент и остальную часть вектора. Однако я делаю следующие наблюдения, которые не могу объяснить:
function(vector<int> indeces){
// indeces = [1,2,3]
vector<int> indeces_ = indeces;
// indeces = [1,2,3] = indeces_
indeces_.pop_back();
// indeces = [1,2,3], indeces_ = [1,2]
// BUT: *indeces.end() != 3 but some unrelated integer
}
Ваш код неверен. Вы не можете использовать end()
сюда:
Возвращает итератор, ссылающийся на пришедший к концу элемент в векторном контейнере.
Последний элемент — это теоретический элемент, который будет следовать за последним элементом в векторе. Он не указывает на какой-либо элемент и, следовательно, не должен быть разыменован.
Я думаю, что вы не используете класс std :: vector правильно.
void std :: vector :: pop_back () удаляет последний элемент в коллекции, эффективно уменьшая размер контейнера на единицу.
Функция std :: vector :: end () возвращает итератор, который в данном случае является указателем, указывающим на элемент после последнего элемента в коллекции.
Кроме того, есть несколько проблем с кодом, который вы опубликовали.
Ожидается, что функция вернет тип. Если вы хотите ничего не вернуть, верните void.