c++ - 如何使用以下模板为 map 声明迭代器 - std::map<std::string, T> my_map?

标签 c++ templates iterator stdmap

我有以下类声明-

template <typename T> 
class Polynomial{
  std::map<std::string, T> _polynomial_
}

在成员函数中,我为此声明了一个迭代器 -

typename std::map<std::string, T>::iterator it= _polynomial_.begin();

完成的成员函数如下所示-

template <typename T>
void Polynomial<T>::print(std::ostream& out) const
{


  typename std::map<std::string, T>::iterator it= _polynomial_.begin();
  std::string term;
  while(it != _polynomial_.end()){


    term = it->second;
    term += it->first;
    if(it->first < (T)0){
      out << "-" << term;
    }
    else{
      out << "+" << term;
    }
    term = "";
    it++;
  }


}

在 main 中,我调用函数如下 -

 Polynomial <double> p1;

  p1.add_term("x0",9.862);

  std::cout << p1;

但是这似乎不起作用并且我收到错误。海湾合作委员会提示 转换错误 -

Polynomial.hpp:32:47: 错误:从\u2018std::map, double, std::less >, std::allocator, double>> >::const_iterator {aka std::_Rb_tree_const_iterator, double>>}\u2019 到非标量类型\u2018std::map、double、std::less >、std::allocator、double>> >::iterator {aka std::_Rb_tree_iterator、double>>}\u2019 请求 typename std::map::iterator it= 多项式.begin();

谁能告诉我迭代器的正确声明是什么?

最佳答案

Polynomial<T>::printconst成员函数,其中数据成员_polynomial_变成 const同样,这意味着什么 _polynomial_.begin()返回是 const_iterator , 无法转换为 iterator含蓄地。 (注意 std::map::begin 重载了 const 版本和非 const 版本,前者返回 const_iterator 后者返回 iterator 。)

将代码改为

typename std::map<std::string, T>::const_iterator it = _polynomial_.begin();
//                                 ^^^^^^

或使用 auto 相反,它会为您推断出正确的类型。

auto it = _polynomial_.begin();

关于c++ - 如何使用以下模板为 map 声明迭代器 - std::map<std::string, T> my_map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53147471/

相关文章:

C++、OLE、Excel 自动化 : EAccessviolation at 00000800

c++ - 迭代卡汉求和的优化实现

c++ - 如何在单击任务栏期间捕获隐藏/恢复事件

c++ - 此代码旨在输出 Hello World。但它输出 0x22fed8

c++ - 为什么从 void 函数模板返回时没有出现编译器错误?

C++ 元编程

c++ - 使用模板函数从 CSV 文件中读取数字

iOS 遍历对象的属性并添加操作

python - 使用迭代器实现 Chop()

c++ - 如何使用 C++ Boost 的 regex_iterator()