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 に答える