gpt4 book ai didi

c++ - 如何使用两个函数,一个返回迭代器,另一个返回 const_iterator

转载 作者:可可西里 更新时间:2023-11-01 18:19:10 26 4
gpt4 key购买 nike

所以我有一个名为 find 的函数,它有两个版本:

template <typename T> 
typename btree<T>::iterator btree<T>::find(const T& elem)
{
//Implementation
}

另一个是const_iterator版本:

template <typename T> 
typename btree<T>::const_iterator btree<T>::find(const T& elem) const
{
//Implementation
}

在我做的时候在我的测试文件中

btree<char>::iterator it = myTree.find('M');

一切正常,但是当我使用 const_iterator 版本时:

btree<char>::const_iterator it = myTree.find('M');

它给了我错误

error: conversion from 'btree_iterator' to non-scalar type 'const_btree_iterator' requested

这显然意味着 find 只使用迭代器(非 const)版本。我知道 C++ 应该自动调用 const_iterator 版本 - 如果我做对了一切。所以问题是,我可能做错了什么?

迭代器类是:

class btree_iteratorclass const_btree_iterator 这只是 btree_iterator 的复制粘贴,但名称已更改

这里是完整的源代码:
btree_iterator.h(包括 const_btree_iterator)http://pastebin.com/zQnj9DxA
btree.h http://pastebin.com/9U5AXmtV
btree.tem http://pastebin.com/U9uV3uXj

最佳答案

所有标准容器都实现了从非常量到常量迭代器的转换(如 specified in the requirements for the Container concept ):

The type of iterator used to iterate through a container's elements. The iterator's value type is expected to be the container's value type. A conversion from the iterator type to the const iterator type must exist.

你需要像这样的转换构造函数:

class btree_iterator;
class const_btree_iterator
{
// ....
public:
const_btree_iterator(const btree_iterator& rhs) { /* .... */ }
//optionally: const_btree_iterator& operator=(const btree_iterator& rhs) { /* .... */ }
};

我也加入了赋值运算符,但我认为它是多余的

关于c++ - 如何使用两个函数,一个返回迭代器,另一个返回 const_iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7874362/

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