gpt4 book ai didi

c++ - map 中的 map Map.Clear() 错误

转载 作者:行者123 更新时间:2023-11-30 04:33:35 25 4
gpt4 key购买 nike

void destroy()
{
AList::const_iterator a;
for(a = AList.begin(); a != AList.end();)
{
if(!a->second.BList.empty())
a->second.BList.clear();//will give error if not mutable
}
}
typedef std::map<unsigned int,int> bmap;
typedef std::map<unsigned int,someStruct> Alist;
typedef struct someStruct
{
float x,y,z;
bmap BList; //needs to be mutable for Blist.clear() above.
//mutable bmap BList; //<---like this
} someStruct;

我只是在一个类似但不相同的问题中偶然发现可变作为一个选项。我的问题是我是否在做正确的事情,或者这样做是否有任何陷阱?提前感谢您的帮助。

//error given: (if otherwise not mutable)
// error: passing 'const AList' as 'this' argument of 'void std::map<_Key, _Tp, _Compare, _Alloc>::clear() [with _Key = unsigned int, _Tp = int, _Compare = std::less<unsigned int>, _Alloc = std::allocator<std::pair<const unsigned int, int> >]' discards qualifiers

最佳答案

如果您打算调用clear,您应该使用iterator 而不是const_iteratorconst_iterator 适用于仅调用 const 成员函数的情况。

使用 mutable 不适合这种情况。仅当成员变量不是对象可见状态的一部分(例如缓存数据)时,才将它们标记为可变

关于c++ - map 中的 map Map.Clear() 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6742143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com