deque的迭代器出错

时间:2014-02-15 05:44:54

标签: c++ iterator deque

int CardDeck::inOrder(){
    deque<int>::const_iterator i;
    for (i = nameofdeque.begin(); i != nameofdeque.end(); ++i){ 
            if (nameofdeque[i] >= nameofdeque[i+1]){
            return 0;
        }
    }   
    return 1;
 }

此代码在第4行显示错误“CardDeck.cpp:37:error:'['令牌之前的预期类型说明符 CardDeck.cpp:37 ::参数太多了。

我想知道如何解决这个问题。 我试过“if(nameofdeque.at(i)&gt; = nameofdeque.at(i + 1){” 但无济于事。

非常感谢任何帮助, 谢谢!

3 个答案:

答案 0 :(得分:2)

Iterator不是deque的索引,您使用*i来访问它指向的成员。

答案 1 :(得分:2)

在代码中i是迭代器,而不是索引(整数)。 operator[]需要索引(整数)作为参数。

答案 2 :(得分:2)

operator[]接受size_t即索引,但是您正在向其传递迭代器。如果你想用迭代器来做,那么将第4行改为

if (*i >= *(i+1)) {

为了避免这种混淆,迭代器通常被命名为iter,而不是用于循环索引或下标的通常标识符i

如果你真的想在没有迭代器但是使用索引的情况下这样做,那么你可以将函数改为

int CardDeck::inOrder() {
    for (size_t i = 1u; i < nameofdeque.size(); ++i) {
        if (nameofdeque[i - 1] >= nameofdeque[i]) {  // you cannot do this for the first element, hence the loop's variable starts at 1 to offset this
            return 0;
        }
    }   
    return 1;
 }