значение положения в векторе - PullRequest
0 голосов
/ 18 января 2012

Я хочу вставить значение int в векторный объект в позиции -1, то есть:

vector<int> v;
int p = 12;
vector<int>::iterator it = -1;
v.insert(it,1,p);

возможно ли это в c ++?или оно всегда должно быть положительным?

Ответы [ 5 ]

2 голосов
/ 18 января 2012

Вставка с использованием метода insert происходит всегда перед указанным итератором, поэтому для вставки в первую позицию (т. Е. * Перед * текущим первым элементом) используйте:

v.insert(v.begin(), p);

(параметр count можно опустить, если вы вставляете только один элемент).

Вставка в последнюю позицию может быть выполнена с помощью итератора end(), например

v.insert(v.end(), p);

или, в случае векторов, используя push_back() как

v.push_back(p);

Для доступа к векторам вы можете использовать только неотрицательные индексы, т. Е. v[-1] недействительно.

Также вы не можете назначить целое число для итератора, главным образом потому, что итератор инкапсулирует и позицию и контейнера, к которому он обращается. Если вы хотите «построить» итератор для указанной позиции, используйте такие дополнения, как:

std::vector<int> it = v.begin() + index;

(Обратите внимание, что добавление к итераторам работает только для так называемых итераторов с произвольным доступом , поэтому оно зависит от типа контейнера.)

2 голосов
/ 18 января 2012

Это невозможно. vector -индексы должны быть больше или равны 0. Вы должны использовать std::map, если хотите отрицательные индексы.

1 голос
/ 18 января 2012

Векторы указывают индекс, и индекс не может быть отрицательным числом.

1 голос
/ 18 января 2012

Векторные индексы начинаются с нуля. Поэтому не существует такого понятия, как «позиция -1».

Если вы хотите вставить элемент в начале вектора, используйте v.begin() в качестве позиции вставки.

0 голосов
/ 18 января 2012

Всегда позитивно. И вы делаете это:

v[2] = 5;

Только пример. Индекс не может быть отрицательным, потому что это позиция. Отрицательных позиций не существует.

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