这工作完全:
list<int> l;
list<int>::const_iterator it;
it = l.begin();
list<int>::iterator it2;
it2 = l.begin();
我不明白的是列表是如何“知道”它必须返回iterator begin()
版本或const_iterator begin() const
一个。
我试图实现迭代器我的容器(线索),我遇到了这个问题。 不是C ++应该不办理返回类型分化(用怪异的招数时除外)?
下面是一些代码和编译器错误,我得到:
我的Trie<T>
是一个模板特里结构,它可以包含任何类型的。 我有一个Trie<int>::iter
非const迭代器和一个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&)
所以我相信的非const版本begin
不使用。
我曾考虑创建一个operator=(const Trie<T>::const_trie_iterator&)
用于非常量迭代方法,但我不看到,在标准库和我不得不的const_cast迭代器。 我该怎么办?