如何修改QSet的元素
How to modify elements of a QSet?
我有QSet<QuadPattern> texture;
,我想在一个循环中修改所有的QuadPattern。
foreach
不是一个好的解决方案,因为它会复制。
使用下面的代码:
QMutableSetIterator<QuadPattern> it(texture); while (it.hasNext()) { it.next(); it.value().setCoordinate(...)); }
我得到一个编译错误:
error: C2662: 'QuadPattern::setCoordinate' : cannot convert 'this' pointer from 'const QuadPattern' to 'QuadPattern &'
Conversion loses qualifiers
函数setCoordinate
是这样的:
inline void setCoordinate(const std::pair &value) {_coordinate = value;}
错误是因为您试图修改QMutableSetIterator::value()
函数返回的const对象。
我相信你不能这样修改你的set的项,所以没有这样的API。您所需要修改的所有项只是清除集合并再次插入新项。
QMutableSetIterator::value()
返回const引用有一个很好的理由。集合中的项根据其散列在内部建立索引。如果您希望更改它,通常需要移除并重新插入该项目。如果您希望避免复制数据,请将QuadPattern
设置为隐式共享类:
class QuadPatternData : public QSharedData
{
...
};
class QuadPattern {
QSharedDataPointer<QuadPatternData> d;
public:
QuadPattern() : d(new QuadPatternData) {}
QuadPattern(const QuadPattern & other) : d(other.d) {}
QuadPattern(QuadPattern && other) { d.swap(other.d); }
void setCoordinate( ... ) { d->coordinate = ...; }
...
};
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 在 QSet 中插入元素<QString>并检索 ,删除 QSet 的最后一项
- 有效地测试 QSet 是否包含元素,如果不存在,则插入
- 我必须手动删除QSet的每个(指针)元素吗?
- 获取受不存在元素限制的QSet子集
- 如何修改QSet的元素