我正在使用列表作为其基础数据容器来实现multiset和amd。我有一个函数计数,它返回私人列表中项目的出现次数。下面是相关代码:如何从std :: list.begin()强制一个非常量迭代器?
#include <list>
using namespace std;
template <typename T>
class miniMultiSet
{
public:
typedef typename list<T>::iterator iterator; // miniMultiSet iterators are simply list iterators
typedef typename list<T>::const_iterator const_iterator;
miniMultiSet(){} // default constructor
bool empty() const // is the multiset empty?
{return l.empty();}
int size() const // return the number of elements in the multiset
{return l.size();}
int count (const T& item) const
{
int cnt = 0;
for (iterator it = l.begin(); it != l.end(); ++it)
{
if (*it == item)
cnt++;
}
return cnt;
}
//other member functions
private:
list<T> l;// multiset implemented using a list
};
在编译时包括使用count
我得到以下错误(该电话是从这样的情况:T
是string
):
error: conversion from 'std::list<std::basic_string<char>, std::allocator<std::basic_string<char> > >::const_iterator {aka std::_List_const_iterator<std::basic_string<char> >}' to non-scalar type 'miniMultiSet<std::basic_string<char> >::iterator {aka std::_List_iterator<std::basic_string<char> >}' requested
在for
线内count
这使我认为iterator it = l.begin()
正在尝试从常量转换为非常量时出现问题。
这是怎么回事?
有没有一种方法可以调整那个循环或强制一个非常数返回l.begin()
?
感谢
为什么你不使用'const_iterator'? – 2014-10-11 18:48:38
你的“count()const”是const实例兼容的。 因此,使用const_iterator返回对常量值(const T&)的引用,并防止修改引用的值。它强制执行const正确性。 – fox 2014-10-11 20:22:09