C++:映射结构中的结构指针
C++: struct pointer in map structure
我声明了一个这样的结构,以及以下数据结构
struct piece{
int start, height, end;
piece(int a, int b, int c){
start = a; height = b; end = c;
}
};
vector<piece> piecesTog;
map <int,piece*> data;
然后,当我阅读这些元素时,我会这样做:
while(scanf("%d %d %d", &aux1, &aux2, &aux3) != EOF){
piecesTog.push_back( piece(aux1, aux2, aux3) );
data[a] = data[c] = &piecesTog[tam];
}
到目前为止,我没有遇到任何问题。然而,在程序的后面,我必须使用piece*部分,为此,我使用了一个类似的迭代器
for(map< int, piecesTog* >::iterator it = data.begin(); it != data.end(); it++){
piece* aux = it->second;
...
}
我想访问it->second所指向的结构,但我尝试了一切,但都没有成功。
我打印了它的记忆地址->秒和&piecesTog[tam]和它们是一样的,但当我做(*aux(.height或it->second->height时,它们给出的数字完全疯狂,可能是一些垃圾。
我不知道为什么会发生这种事。
如果有人知道如何修复它,我将不胜感激。
while(scanf("%d %d %d", &aux1, &aux2, &aux3) != EOF){
piecesTog.push_back( piece(aux1, aux2, aux3) );
data[a] = data[c] = &piecesTog[tam];
}
几乎可以肯定没有遵循Iterator无效规则。
piecesTog.push_back( piece(aux1, aux2, aux3) );
可以触发调整大小,通常会创建一个新的数据存储,将元素从旧的数据存储复制到新的数据存储器,然后删除旧数据存储,留下缓存的指针
data[a] = data[c] = &piecesTog[tam];
晃来晃去。当你将来使用这些指针时,Ka Blammo!如果你运气好的话,还可以有未定义的行为和容易识别的撞车事故。
提供的信息不足,无法提供明确的解决方案,但以下是一些通用的替代方案(按吸引力排序(:
如果您提前知道将进入piecesTog
的piece
的数量,则可以使用reserve
存储来消除调整vector
大小的需要。
如果元素只添加到vector
的末尾,并且从未删除过任何元素,则可以存储元素的索引,而不是指向它们的指针。如果排序从未更改,则无论添加了多少项,索引都将始终引用正确的元素。
如果可以这样做,请重写读取器,将所有pieces
加载到piecesTog
中,然后构建映射。
以上选项都假设piecesTog
是一次性组装的,然后单独放置。如果插入更自由,对结构进行排序或删除元素,则需要使用具有更有利无效规则的数据结构,如std::list
。
- 如何在 C# 中映射双 C 结构指针?
- C++:映射结构中的结构指针
- C++:添加新结构时,结构指针向量中的所有元素都会更新
- 类的静态结构指针声明在C++
- 在两个.cpp文件之间定义全局类/结构指针
- 返回对常量结构(指针类型)成员的引用:明显的左值到右值转换
- 是否可以将无符号字符数组reinterpret_cast到仅包含C++中无符号字符成员的结构指针
- 如何在地图中使用结构指针
- 结构指针在"新"调用上给出已分配的地址?
- 铸造结构指针指向C 的工会指针
- c++ 结构指针在初始化为 NULL 时无法读取内存
- 函数中的结构指针的地址为0x1
- C 用结构指针初始化结构
- C 结构指针铸成数组Interop C#
- 方法中不允许访问结构指针
- 如何打印出结构指针
- MPI_Op_create:候选功能不可行.自定义结构指针不能解释为空指针
- 尝试将结构指针传递给类时出错
- 初始化结构指针的值
- 使用 pybind11 将自定义结构(指针向量)从 C++ 传递到 python 的方法是什么?