通过迭代器的c++访问集
C++ access set via iterator
我有以下代码:
struct voxel
{
int x, y, z;
};
std::set<std::set<voxel>> regions;
std::set<std::set<voxel>>::iterator regions_it;
std::set<voxel>::iterator voxel_it;
for (regions_it = regions.begin(); regions_it != regions.end(); regions_it++){
for (voxel_it = regions_it->begin(); voxel_it != regions_it->end; voxel_it++){
if (condition){
struct voxel v = { 1, 2, 3 };
regions_it->insert(v);
}
}
}
假设"condition"是一个布尔值。我对regions_it->insert(v)
尤其有困难。箭头(->)被标记为错误。我尝试了regions_it.insert(v)
,但它也不起作用。
regions_it
应该是一个指针,指向一组体素,如果我没有错,但我怎么能调用插入方法?
我对c++还不熟悉。如果有人能帮我一下就太好了。
没有大括号:
if (condition)
struct voxel v = { 1, 2, 3 };
regions_it->insert(v);
所以当你试图使用v时,它超出了作用域。
你也没有在这里加上括号:
for (voxel_it = regions_it->begin(); voxel_it != regions_it->end; voxel_it++){
然而,主要问题是不能更改集合中的元素,因为它们用于对集合的内容进行排序,如果直接更改它们,集合可能不再按预期工作。因此,对集合上的迭代器解引用将返回对其内容的const
引用。const std::set
没有insert
方法
是的,使用list代替set(和push_back()代替insert())工作
但是请注意,一般来说,修改你正在迭代的集合不是一个好主意。它会导致非常讨厌的虫子。一般来说,在一个新的数据结构中创建迭代的结果,并在末尾复制它是一个好主意。
另一个注意事项是,在您的示例中,您根本没有使用第二个内部循环。相关文章:
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 用于访问容器<T>数据成员的正确 API
- 访问者访问变体并返回不同类型时出错
- 尝试通过多个向量访问变量时,向量下标超出范围
- 无法访问嵌套类.类的使用无效
- 写入位置0x0000000C时发生访问冲突
- 我们可以访问一个不存在的联盟的成员吗
- C++从另一个类访问公共静态向量的正确方法是什么
- 我的简单if-else语句是如何无法访问的代码
- 从C++dll访问C#中的一行主要参数
- 概念TS检查忽略私有访问修饰符
- 访问被拒绝后,c++中的故障保护代码
- 在c++中访问int到类对象的映射时出错
- 我想访问std::unique_ptr中的一个特定元素
- 为什么示例代码访问IUnknown中已删除的内存
- C++:无法访问声明的受保护成员
- 通过指向指针数组的指针访问子类的属性
- 如何使用单独文件中的派生类访问友元函数对象