gpt4 book ai didi

c++ - 如何从 vector 中获取非常量值

转载 作者:行者123 更新时间:2023-11-30 02:45:38 25 4
gpt4 key购买 nike

如果我有一个类:

class T{
public:
int Id;
//some methods, constructor..
}

在其他类中:

vector<T> collection;

并想写一个方法:

T& getValue(int Id){
//scanning the vector till i find the right value
}

问题是通过迭代器扫描 vector 总是给出一个 const 值,所以我得到一个关于限定符的错误。那么如何从 vector 中获取值呢?但不是常量。

编辑:根据答案,我尝试这样做:

Group& Server::findGroup(unsigned int userId) const{
for(auto iterator=groups.begin();iterator!=groups.end();++iterator){
if(iterator->isInGroup(userId)){
return (*iterator);
}
}
//throw exception here
}

组的定义: vector 组;

这与我最初给出的示例完全相同,但现在 T 是组。

最佳答案

下面的代码应该给你一个非 const 迭代器并且工作正常:

for(vector<T>::iterator i = collection.begin(); 
i != collection.end(); ++i) {
if(Id != i->Id)
continue;
// Matching ID! do something with *i here...
break;
}

如果这没有帮助,请更详细地解释损坏的地方。


这里的问题是你声明中的const:

Group& Server::findGroup(unsigned int userId) const //<==THIS

这意味着 this 是一个 const Server*,因此其中的所有内容也是 const,包括 groups。这意味着 groups.begin() 将返回一个 const_iterator 而不是 iterator

可以做的一件事(可能不是一个好主意;您需要非常确定!)是将标记为可变,即使它的封闭对象是 const 也可以更改它:

mutable vector<T> groups;

这样做将使 groups.begin() 返回一个常规的 iterator

但是我会要求您重新评估为什么将此方法声明为 const,因为您要以 的形式返回对象的一部分可以更改,因此您并没有真正遵守 const

关于c++ - 如何从 vector 中获取非常量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24265074/

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