gpt4 book ai didi

c++ - 我如何从 std::list.begin() 中强制一个非常量迭代器?

转载 作者:行者123 更新时间:2023-11-28 06:38:54 25 4
gpt4 key购买 nike

我正在研究多重集的实现,我正在使用列表作为其底层数据容器。我有一个函数计数,它返回私有(private)列表中某个项目的出现次数。相关代码如下:

#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 时,我收到以下错误(调用来自 Tstring 的实例):

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

count 内的 for 行上,这让我觉得 iterator it = l.begin() 导致了一个问题,试图从常量转换为非常量。

是这样吗?

有没有一种方法可以调整该循环或强制 l.begin() 的非恒定返回?

谢谢

最佳答案

"Is that what is happening?"

好吧,你给出的签名只适用于 const 类实例兼容性

 int count (const T& item) const {
// ^^^^^

"Is there a way I can adjust that loop or force a non constant return of l.begin()?"

特别是对于或强制非常量返回,不,你不能,而且你当然不想为这个操作。您应该在循环中简单地使用 const_iterator:

int count (const T& item) const {
int cnt = 0;
for (const_iterator it = l.begin(); it != l.end(); ++it) {
// ^^^^^^^^^^^^^^
if (*it == item)
cnt++;
}
return cnt;
}

关于c++ - 我如何从 std::list.begin() 中强制一个非常量迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26318021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com