首页 > 解决方案 > 如何检查给定索引处的`std::vector`中是否存在**任何**元素

问题描述

我有一个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'sstd::optional<>但我正在使用c++14. 有什么方法可以找出std::vectorc++14 中不为空的点。

从函数赋值后,向量看起来像这样

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

我想遍历上面的向量,只说打印std::pairs

标签: c++c++14

解决方案


如果你不对你的数据结构做一些工作,你就不能这样做,因为向量中的每个元素都被初始化了。

我认为最简单和最快的方法是存储std::vector<bool>相同大小的 a 来存储元素是否不仅被初始化,而且以后也被“修改”。

如果您担心可能忘记设置另一个向量,请将它们绑定在一起:

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

如果你还是觉得这太难看,你可能要实现自己的简单optional


推荐阅读