如何使用以下模板为地图声明迭代器 - std::map<std::string, T> my_map?
How do I declare an iterator for a map with the following template - std::map<std::string, T> my_map?
我有以下 class 声明 -
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> > >::[=41= 转换] {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>::print
是一个const
成员函数,里面的数据成员_polynomial_
也变成了const
,也就是说_polynomial_.begin()
returns 是 const_iterator
,不能隐式转换为 iterator
。 (注意std::map::begin
重载了const
版本和非const
版本,前者returnsconst_iterator
后者returnsiterator
.)
将代码更改为
typename std::map<std::string, T>::const_iterator it = _polynomial_.begin();
// ^^^^^^
或使用 auto
,它会为您推断出正确的类型。
auto it = _polynomial_.begin();
我有以下 class 声明 -
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> > >::[=41= 转换] {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>::print
是一个const
成员函数,里面的数据成员_polynomial_
也变成了const
,也就是说_polynomial_.begin()
returns 是 const_iterator
,不能隐式转换为 iterator
。 (注意std::map::begin
重载了const
版本和非const
版本,前者returnsconst_iterator
后者returnsiterator
.)
将代码更改为
typename std::map<std::string, T>::const_iterator it = _polynomial_.begin();
// ^^^^^^
或使用 auto
,它会为您推断出正确的类型。
auto it = _polynomial_.begin();