векторная позиция c ++ установлена в 1 вместо 0

0

У меня вопрос о позиции вектора. поскольку мы знаем, что если бы мы что-то хранили в вектор. он начнет хранить первый элемент в позиции 0.

поэтому, например, у меня есть 3 вещи в моем векторе

vector position 0 ->itemOne  
vector position 1 ->itemTwo
vector position 2 ->itemThree.

есть ли в любом случае я могу сделать, чтобы первое хранилище элементов в позиции 1 позиции вместо позиции 0?

Теги:

4 ответа

4

Вы можете создать фиктивный первый элемент. Пожалуйста, не делайте этого, но все, кто использует C++, ожидают, что векторы будут основаны на 0.

Если это не то, что вы имели в виду, тогда нет, нет способа. Просто потому, что доступ к элементу в первой позиции осуществляется с помощью индекса 0. Итак, position 1 - ваше представление vec[0]. Просто имя.

Или переключитесь на Паскаль.

3

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

  • 0
    спасибо за предложение
  • 0
    Это не обязательно вводит в заблуждение, если намерение и наименование прояснены. На самом деле это может снизить риск появления ошибок, если векторная оболочка используется для хранения уже проиндексированных данных. В этом случае было бы лучше реализовать метод [] или at(n) с более точным именем, другая вещь заключается в том, что подобная обертка не должна выглядеть как std :: vector.
1

Да. Вы можете вставить фикцию в позицию 0. И реальное значение позже. Конечно, вы хотите итерации И получить доступ с помощью "человеческих индексаторов". Это приведет к сбою последней записи. Этот язык основан на нулевом индексе.

  • 0
    спасибо за предложение
  • 0
    Я думаю, что это плохая идея, потому что это не стабильное решение - например, просто подумайте, что происходит после сортировки элементов.
Показать ещё 1 комментарий
0

Вектор - это просто массив, поэтому он является 0-индексированным. Конечно, вы можете хранить фиктивные данные в позиции 0, но я рекомендую вам вычесть 1 из желаемой позиции.
Или если вы можете найти библиотеку (обертку), которая использует вектор с 1 индексом, например:
https://www.rosettacommons.org/manuals/archive/rosetta3.4_user_guide/d3/dd5/classutility_1_1vector1.html
Или вы можете просто создать желаемый класс, который может получить доступ к желаемому элементу по индексу, который начинается с 1.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню