Как проверить, существует ли ** любой ** элемент в `std :: vector` по заданному индексу - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть std::vector, как это

std::vector<std::pair<T,T>> xyz. xyz имеет длину 10, а другая функция заполняет ровно 3 точки, скажем, 4, 6 и 8 с std::pair<T,T>. Итерируя по вектору, я хочу знать, где находятся непустые пятна, чтобы я мог дальше работать с std::pair<T,T> s.

Я думаю, что могу использовать c++17 std::optional<>, но я использую c++14. Есть ли способ найти пятна в std::vector, которые не пусты в C ++ 14.

вектор будет выглядеть примерно так после назначения из функции

index  value
 0:
 1:
 2:
 3:
 4:    <7,8>
 5:
 6:    <9,2>
 7:
 8:    <8,6>
 9:

Я хочу перебрать указанный выше вектор и сказать только: std::pairs

1 Ответ

1 голос
/ 04 апреля 2020

Это невозможно сделать, если вы не выполняете какую-либо работу над структурой данных, поскольку каждый элемент в векторе инициализируется.

Самый простой и быстрый способ, как мне кажется, это сохранить std::vector<bool> одного размера для хранения информации о том, был ли элемент не только инициализирован, но и «изменен» позднее.

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

std::vector<std::pair<std::pair<int, int>, bool>> a;

Если вы все еще думаете, что это слишком уродливо, вам, возможно, придется реализовать свой собственный простой optional

...