这是操作C++容器元素的正确方法吗
Is this a correct way to manipulate the elements of a C++ container?
我有一个形式为map<long, class>
的map
,我在long上搜索一个元素,返回形式为pair<bool, class&>
的结果-布尔表示引用是否有效。
引用来自形式为it->second
的迭代器,其中it
是指向具有正确long
的map
元素的迭代程序。
然后,我在另一个函数中继续操作对类实例的引用。
所以我的问题是:
- 这是返回引用的有效方法吗
- 操纵被引用的对象会改变地图中包含的元素吗
如果这些问题看起来很愚蠢,请提前道歉:我以为答案很简单,但我的代码行为不端,所以我正在努力填补所有可能的空白。
1)只要引用仅在bool标志为true时使用,并且被引用的对象不会从映射中移除。
2) 虽然我认为这在技术上是有效的,但我不会这样做。我会传递一个指向类的指针,nullptr
表示在映射中找不到类实例,而不是布尔和引用。
3) 是,修改引用/指向的实例将修改映射中的对象;只要在这个过程中,你没有意外地复制对象,并且现在引用的是副本,而不是地图中的原始对象。
这是返回引用的有效方法吗?
没有。如果没有可引用的对象,则不能创建"无效引用";因此,在这种情况下,您需要处理一个要引用的伪对象。
返回一个指针。它更简单、更小、不那么令人惊讶,而且(最重要的是)如果没有对象可以指向,它可以合法地为null
操纵被引用的对象会改变地图中包含的元素吗?
是;可以使用对map元素的引用或指针来操作该元素。
相关文章:
- 数组元素打印的递归方法
- 如何实现 Front() 方法以返回模板化双向链表C++的第一个元素?
- 有什么方法可以将元素添加到列表中,如图所示?
- 在向量中查找大于 0(或通常为 k)的最小元素的最佳方法是什么?
- C++将所有元素从矢量复制到地图/unordered_map的最佳方法
- 在C++中更改结构内部元素的方法?
- 通过作为指向 C++ 函数的指针传递来访问 std::array 元素的正确方法是什么?
- 有没有更快的方法可以在 std::vector 中插入元素
- 返回向量元素的 l 值的正确方法是什么?
- 按升序打印矢量的所有元素直到它为空而没有重复项的最有效方法是什么?
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- 如何在不迭代的情况下对数组中的每个元素调用方法
- 是否有更有效的方法来检查元素是否在给定的区间内
- 这种获取模板参数包中最后一个元素的方法是否有隐藏的开销?
- 将__m256的奇怪元素提取到__m128中的有效(在锐龙上)方法?
- 为什么 memcpy() 是一种将元素添加到 'std::map' 的方法?
- 从长(且合理)稀疏向量中选择随机元素的最有效方法是什么?
- 如何使用返回第 n 个元素的方法创建元组
- 如何在不使用 vector::erase() 的情况下编写自定义 Vector 方法来删除元素?
- 从任意容器中廉价删除元素的惯用方法?