【发布时间】:2021-06-03 15:02:33
【问题描述】:
考虑以下代码,其中: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
::iterator' {aka 'std::_List_iteratorstd::__cxx11::basic_string '} 到 'std::__cxx11::string*' {aka 'std::__cxx11::basic_string*'} 在 初始化在 C:/Users/....中包含的文件中
我的教授说迭代器粗略地说是一个指针,所以我希望这样使用它。为什么会出现此错误,如何解决?
【问题讨论】:
-
您在第二个函数中指的是
string& pelement = it;,您说您希望将迭代器视为指针?那里没有指针。您的意思是改用string* pelement = it;吗? -
@cigien 是的,抱歉打错了。我修好了
-
大多数“C++ 教授”几乎不知道他们在说什么,所以一定要对他们所说的一切持保留态度。举个例子:在 C++ 中,目标是尽可能避免使用指针。老实说,任何教导相反的人都是在提供糟糕的建议。
-
很大一部分 C++ 教授是 Java 教授,他们被勒索教授 C++,因此对指针以及何时合适存在许多误解(事实上,指针使用
new,用于Java 中的一切 都无济于事)。 -
您使用的什么格式并不重要,重要的是它的可读性。这是一个方便的工具,您可以使用format.krzaq.cc 只需将您的代码粘贴到那里,然后单击“格式”即可查看差异。