gpt4 book ai didi

C++ vector 模板迭代器结束函数

转载 作者:行者123 更新时间:2023-11-28 06:01:36 24 4
gpt4 key购买 nike

我的任务是编写带有单独描述的模板 vector 。我想实现迭代器,但在 end() 函数中出现奇怪的错误。

我有两个构造函数:

template <class T>
Vector<T>::iterator::iterator(Vector<T>& v): vector(v), index(0){}

template <class T>
Vector<T>::iterator::iterator(Vector<T>& v, bool): vector(v), index(v.getSize()){}

以及begin()和end()实现:

template <class T>
typename Vector<T>::iterator Vector<T>::iterator::begin()
{
return iterator(*this);
}

template <class T>
typename Vector<T>::iterator Vector<T>::iterator::end()
{
return iterator(*this, true);
}

在 main() 中:

 Vector<int>::iterator it(vec);        
for(Vector<int>::iterator start = it.begin(); start != it.end(); ++start)
{
std::cout << *start << std::endl;
}

我有一个错误:

F:\Vector\vector.cpp:281: ошибка: no matching function for call to 'Vector<int>::iterator::iterator(Vector<int>::iterator&, bool)'
return iterator(*this, true);

看来,我有什么不明白。怎么了?

最佳答案

这里:

template <class T>
typename Vector<T>::iterator Vector<T>::iterator::begin()
{
return iterator(*this);
}

template <class T>
typename Vector<T>::iterator Vector<T>::iterator::end()
{
return iterator(*this, true);
}

您通过传递 *this 构造一个迭代器,但是*this是对迭代器的引用。正如编译器所说,您没有定义任何将迭代器引用作为参数的迭代器构造函数。您的 2 个构造函数都引用了一个 vector (而不是迭代器)。你应该这样做:

template <class T>
typename Vector<T>::iterator Vector<T>::begin()
{
return iterator(*this);
}

template <class T>
typename Vector<T>::iterator Vector<T>::end()
{
return iterator(*this, true);
}

(我删除了 ::iterator 因为 beginend 应该是 vector 的方法,而不是迭代器的)。现在*this将是对 Vector<T> 的引用.

关于C++ vector 模板迭代器结束函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33180771/

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