У меня вопрос о позиции вектора. поскольку мы знаем, что если бы мы что-то хранили в вектор. он начнет хранить первый элемент в позиции 0.
поэтому, например, у меня есть 3 вещи в моем векторе
vector position 0 ->itemOne
vector position 1 ->itemTwo
vector position 2 ->itemThree.
есть ли в любом случае я могу сделать, чтобы первое хранилище элементов в позиции 1 позиции вместо позиции 0?
Вы можете создать фиктивный первый элемент. Пожалуйста, не делайте этого, но все, кто использует C++, ожидают, что векторы будут основаны на 0.
Если это не то, что вы имели в виду, тогда нет, нет способа. Просто потому, что доступ к элементу в первой позиции осуществляется с помощью индекса 0
. Итак, position 1
- ваше представление vec[0]
. Просто имя.
Или переключитесь на Паскаль.
Вы можете создать обертку вокруг вектора и перезаписать оператор []
. Однако я считаю, что это крайне нецелесообразно, так как любой здравомыслящий разработчик будет вводить в заблуждение ваш код.
Да. Вы можете вставить фикцию в позицию 0. И реальное значение позже. Конечно, вы хотите итерации И получить доступ с помощью "человеческих индексаторов". Это приведет к сбою последней записи. Этот язык основан на нулевом индексе.
Вектор - это просто массив, поэтому он является 0-индексированным. Конечно, вы можете хранить фиктивные данные в позиции 0, но я рекомендую вам вычесть 1 из желаемой позиции.
Или если вы можете найти библиотеку (обертку), которая использует вектор с 1 индексом, например:
https://www.rosettacommons.org/manuals/archive/rosetta3.4_user_guide/d3/dd5/classutility_1_1vector1.html
Или вы можете просто создать желаемый класс, который может получить доступ к желаемому элементу по индексу, который начинается с 1.
at(n)
с более точным именем, другая вещь заключается в том, что подобная обертка не должна выглядеть как std :: vector.