Разве векторные индексы не распространяются в C ++?Какой обходной путь? - PullRequest
0 голосов
/ 17 февраля 2019

Когда я инициализирую вектор:

std::vector <int> someVec;

и я вызываю:

std::cout << someVec[-1];

с произвольным числом элементов, всегда возвращается 0.

IsЕсть ли способ обойти это?Невозможность сделать это в C ++ испортила мою функцию сортировки.Есть ли способ инициализировать указанный вектор по-другому, чтобы вернуть последний элемент в векторе, а не 0, который кажется по умолчанию.Кажется, что любой индекс, вызванный вне диапазона вектора, приведет к 0. Он не упакован, что сбивает меня с толку.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Есть ли способ обойти это?

Для доступа к последнему элементу в std::vector используйте std::back:

std::vector<int> vec(10,1);
std::cout << vec.back();    // prints 1

Обратите внимание, чтопосле инициализации по умолчанию вектора

std::vector<int> vec2;

доступ к любому индексу с помощью operator[] является неопределенным поведением, поскольку размер вектора 0, нет элементов для доступа.

0 голосов
/ 17 февраля 2019

Поведение доступа к вектору за пределами границ (например, по индексу [-1]) не определено.

Есть ли способ [...] вернуть последний элемент в векторе

Пример: someVec.back()

Если вам нужен контейнер, который возвращает последний элемент при использовании индекса [-1], то вектор не является контейнером для вашей цели.В стандартной библиотеке такого контейнера нет.

Невозможность сделать это в C ++ портит мою функцию "sort".

Идеальным подходом может быть исправлениеФункция "sort" не требует доступа к [-1].Стандартная библиотека поставляется с функцией сортировки, так что вам, возможно, даже не понадобится реализовывать ее самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...