我正在尝试使用 C++ 列表 ADT,但我似乎无法使迭代器或调用正常工作。我不知道如何从数组初始化新列表,而且我不断收到错误消息,即未为迭代器定义 = 和 != 运算符。这段代码是基于一个 friend 的作业(我试图向他展示他可以通过使用列表来改进他的代码)。除了变量声明和引发错误的代码部分,我已经删除了所有逻辑。
#include <list>
using namespace std;
const static char *dias[] = {"Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado"};
//Don't know how to initialize list from array
const static list<char *> DIAS (7);
int main (int argc, char *argv[]) {
list<char *>::iterator iter;
//ERROR HERE. Says = and != operator not defined for iterator iter.
for(iter = DIAS.begin(); iter != DIAS.end(); ++iter){
}
return 0;
}
我的代码基于以下位置的示例代码和文档:http://www.cplusplus.com/reference/list/list/list/
最佳答案
你的列表是const
,所以你需要一个const_iterator
:
list<char *>::const_iterator iter;
在 C++11 中,您可以通过对代码进行简单修改来避免此问题:
for(auto iter = DIAS.begin(), end = DIAS.end(); iter != end; ++iter){ ... }
至于列表初始化,C++11允许你这样做:
static const std::list<const char*> DIAS{"Domingo", "Lunes", "Martes", "Miercoles",
"Jueves", "Viernes", "Sabado"};
请注意,类型应为 const char*
,因为元素指向字符串文字。
关于C++ 11 STL 列表 = 和 != op 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16426410/