这完美地工作:
list<int> l;
list<int>::const_iterator it;
it = l.begin();
list<int>::iterator it2;
it2 = l.begin();
我不明白的是如何list
“知道”它必须返回iterator begin()
版本或版本const_iterator begin() const
。
我正在尝试为我的容器(trie)实现迭代器,我遇到了这个问题。C++ 不应该不按返回类型处理差异化(除非使用奇怪的技巧)?
这是一些代码和我得到的编译器错误:
MyTrie<T>
是一个模板化的 trie,可以包含任何类型。我有一个Trie<int>::iter
非常量迭代器和一个Trie<int>::const_iter
常量迭代器。iter begin()
并const_iter begin() const
在 Trie 类中声明(和定义)。
Trie<int> t;
Trie<int>::const_iter it;
it = t.begin();
错误 :
../test/trie.cpp:181: error: no match for 'operator=' in 'it = Trie<T>::begin() [with T = int]()'
[..path..]/Trie.h:230: note: candidates are: Trie<int>::const_trie_iterator& Trie<int>::const_trie_iterator::operator=(const Trie<int>::const_trie_iterator&)
所以,我相信begin
不使用非常量版本。
我考虑为非常量迭代器创建一个operator=(const Trie<T>::const_trie_iterator&)
方法,但我在STD
lib 中看不到它,我必须对迭代器进行 const_cast。我该怎么办?