我正在尝试使用C++列表ADT,但我似乎无法使迭代器或调用工作正常.我不知道如何从数组初始化一个新列表,并且我不断收到错误= =和!=运算符没有为迭代器定义.这段代码基于朋友的家庭作业(我试图向他展示他可以通过使用列表来改进他的代码).我已经删除了所有逻辑,但变量声明和抛出错误的代码部分.
#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;
}
Run Code Online (Sandbox Code Playgroud)
我的代码基于示例代码和文档,网址为:http://www.cplusplus.com/reference/list/list/list/
你的清单是const,所以你需要一个const_iterator:
list<char *>::const_iterator iter;
Run Code Online (Sandbox Code Playgroud)
在C++ 11中,您可以通过对代码的简单修改来避免此问题:
for(auto iter = DIAS.begin(), end = DIAS.end(); iter != end; ++iter){ ... }
Run Code Online (Sandbox Code Playgroud)
至于列表初始化,C++ 11允许您这样做:
static const std::list<const char*> DIAS{"Domingo", "Lunes", "Martes", "Miercoles",
"Jueves", "Viernes", "Sabado"};
Run Code Online (Sandbox Code Playgroud)
请注意,类型应该是const char*,因为元素指向字符串文字.