双端的迭代器中的错误
Error in an iterator for a 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:错误:"["标记之前的预期类型说明符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[]
需要索引(整数)作为参数。
相关文章:
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 初始化迭代器错误 C++ 在 GCC 编译器中
- 迭代器类的重载前缀增量运算符会引发分段错误
- 为什么我在使用 istream 迭代器时会出现 seg 错误?
- 在静态库中使用输出迭代器时出现链接器错误
- 在分配和发布递增循环迭代器时C++无限循环(gcc 错误?
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- C++结构编译器错误询问向量的迭代器
- 编译时二叉搜索树错误的反向迭代器表示"no matching function call for operator=()"
- 编译错误 std::vector<std::shared_ptr<T>>迭代器和擦除方法
- 赛松迭代器错误
- 向量迭代器不兼容的错误,用于保存另一个向量的迭代器的向量
- C++,弹出调试断言失败窗口,我得到矢量迭代器不兼容的错误运行时
- 在 leveldb 的 c++ 示例中声明迭代器时出现分段错误
- std::map 擦除 - 将迭代器传递给错误的映射
- C++向量迭代器nth_element编译错误
- 如何修复错误,迭代器未在此范围内声明,并且迭代器未命名类型'
- 如何修复使用矢量和迭代器打印值的错误
- C++ 迭代器错误"does not refer to a value"
- 使用 -std=c++0x 会导致错误:“迭代器”未命名类型错误