矢量迭代器类型未知

Vector iterator type unknown

本文关键字:未知 类型 迭代器      更新时间:2023-10-16

我正在学习C++,这是我第一次使用迭代器

我已经写下了这段代码:

std::pair<max, max> ConvertToAStarMap::GetLimits(std::string map)
{
    // Init max and min variables.
    int max_x = std::numeric_limits<int>::min();
    int min_x = std::numeric_limits<int>::max();
    int max_y = max_x;
    int min_y = min_x;
    std::vector<std::string> map_cells = ConvertToAStarMap::split(map, ';');
    for (std::string::iterator it = map_cells.begin(); it != map_cells.end(); ++it)
}

我收到此错误:

ConvertToAStarMap.cpp: In member function ‘std::pair<max, max> ConvertToAStarMap::GetLimits(std::__cxx11::string)’:
ConvertToAStarMap.cpp:31:52: error: conversion from ‘std::vector<std::__cxx11::basic_string<char> >::iterator {aka __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >}’ to non-scalar type ‘std::__cxx11::basic_string<char>::iterator {aka __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> >}’ requested
     for (std::string::iterator it = map_cells.begin(); it != map_cells.end(); ++it)
                                     ~~~~~~~~~~~~~~~^~
ConvertToAStarMap.cpp:31:59: error: no match for ‘operator!=’ (operand types are ‘std::__cxx11::basic_string<char>::iterator {aka __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> >}’ and ‘std::vector<std::__cxx11::basic_string<char> >::iterator {aka __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >}’)
     for (std::string::iterator it = map_cells.begin(); it != map_cells.end(); ++it)
                                                        ~~~^~~~~~~~~~~~~~~~~~

怎么了?我不明白。

最简单的方法是:

for (const auto& cell : map_cells)

如果您不想使用基于范围的 for 循环:

for (auto it = map_cells.begin();......

问题是你想遍历向量,而不是字符串,所以它应该是:

for (std::vector<std::string>::iterator it = map_cells.begin();......

此信息在第 2 点的错误中可用。

  1. 错误:转换自
  2. ‘std::vector<std::__cxx11::basic_string<char> >::iterator
  3. {又名 __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > > }'
  4. 到非标量类型
  5. ' std::__cxx11::basic_string<char>::iterator
  6. {又名 __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> > }'