c++ - 如何检查给定索引处的`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::vector
c++14 中不为空的点。
从函数赋值后,向量看起来像这样
index value
0:
1:
2:
3:
4: <7,8>
5:
6: <9,2>
7:
8: <8,6>
9:
我想遍历上面的向量,只说打印std::pairs
解决方案
如果你不对你的数据结构做一些工作,你就不能这样做,因为向量中的每个元素都被初始化了。
我认为最简单和最快的方法是存储std::vector<bool>
相同大小的 a 来存储元素是否不仅被初始化,而且以后也被“修改”。
如果您担心可能忘记设置另一个向量,请将它们绑定在一起:
std::vector<std::pair<std::pair<int, int>, bool>> a;
如果你还是觉得这太难看,你可能要实现自己的简单optional
推荐阅读
- django - 在继承和类型字段之间进行选择
- excel - 跨工作簿共享 VBA 模块
- javascript - Codemirror 中不可见的部分文本
- python - 使用 VBA 执行带有命令行参数的 python 代码
- graphql - 禁用 apollo rest 参数 camelCase 转换
- php - 使用 file_get_contents() 时 Insagram API 响应缓慢
- sql - 优化 SQL 查询获取用户信息的最后修改日期
- python - 导入 ibm_db 失败并出现 ModuleNotFoundError:没有名为“ibm_db”的模块
- laravel-5 - 在laravel 5.6中提交时找不到页面
- javascript - 如何在 URL 哈希修改时触发 Enter 按键事件?