双端的迭代器中的错误

Error in an iterator for a deque

本文关键字:错误 迭代器      更新时间:2023-10-16
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:错误:"["标记之前的预期类型说明符CardDeck.cpp:37::争论太多。

我想知道如何解决这个问题。我尝试了"if(nameofdeque.at(i)>= nameofdeque.at(i+1){"但无济于事。

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

operator[]需要size_t即索引,但您正在向其传递迭代器。如果你想用迭代器来做,那么将第四行改成这个

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;
 }

迭代器不是 deque 的索引,您可以使用 *i 来访问它指向的成员。

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