如何解决迭代器在转换为字符串时抛出错误*
考虑以下代码,其中:list<string> elements
bool SearchElement(const string& product) {
for (list<string>::iterator it = elements.begin(); it != elements.end();i++) {
string& element = *it;
if ( element == product) {
return true;
}
}
return false;
}
我想用指针重写它:
bool SearchElement(const string& product) {
for (list<string>::iterator it = elements.begin(); it != elements.end();i++) {
string* pelement = it;
if ( *pelement == product) {
return true;
}
}
return false;
}
C:\Users...\C++\IShoppingApp.h:141:错误:无法转换
'std::__cxx11::liststd::__cxx11::basic_string
我的教授说迭代器粗略地说是一个指针,所以我希望这样使用它。为什么我会收到此错误,我该如何解决?
解决方法
迭代器就像一个指针,但它不是一个指针。它指的是一个值,但它本身并不是一个指针。不过,您可以获得一个指针:
string* pelement = &*it;
请注意,虽然 &
和 *
是对常规指针的逆运算,但它们通常并非如此,并且许多类型(特别是迭代器)覆盖 *
以表现不同,因此两者不抵消。也可以覆盖 &
,尽管我能想到的合理用例较少。
根据评论,我认为您已经了解这一点,但您需要参考。原始指针在现代 C++ 中通常是不受欢迎的,并且引用清楚地传达了您的意图:“我暂时借用一下,我可能会修改它,但我不负责删除它”。出于教育目的将其指向一个指针很好,但参考方法是正确的 C++ 方法来完成您正在做的事情。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。