C++ 11 STL Lists =和!= op未定义

use*_*664 0 c++ stl list

我正在尝试使用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/

jua*_*nza 6

你的清单是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*,因为元素指向字符串文字.