0

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

我的代码基于以下示例代码和文档:http ://www.cplusplus.com/reference/list/list/list/

4

1 回答 1

6

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

于 2013-05-07T18:51:47.023 回答