[英]How to copy a const_iterator in C++
在我的头文件中
template <typename T>
class Vector {
public:
typedef T* iterator;
typedef const T* const_iterator;
Vector(const_iterator start, const_iterator end);
// other stuff ...
}
在我的.cpp文件中
template <typename T>
Vector< T >::Vector( const_iterator start, const_iterator end ) : theSize( 0 ), theCapacity( 1 )
{
array = new T[ theCapacity ];
typename Vector< T >::iterator itr = start; // this is line 29
for( iterator itr = start; itr != end; itr++ ){
push_back( *itr );
}
}
然而编译器告诉我
Vector.cpp:29: error: invalid conversion from ‘const int*’ to ‘int*’
如何在保持参数为const_iterator的同时解决这个问题?
注意:如果它有助于我尝试在开始和结束之间使用另一个Vector中的元素构造Vector。
我没有看到在循环中不使用const_iterator
的原因。 此外,您的push_back
函数不应该接受迭代器,而是接受值。
因此,我将重写相关部分如下:
typename Vector< T >::const_iterator itr = start;
for(const_iterator itr = start; itr != end; itr++ ){
push_back(*itr);
}
你应该做push_back(*itr)
而不是push_back(itr)
,这将解决你的问题
for循环只需要使用const_iterator。 迭代器的常量仅适用于它的值,它仍然可以递增。 你也可以使用你已经拥有的那个。
Vector(const_iterator pos, const_iterator end)
{
for( ; pos != end; pos++ ){
push_back( *pos );
}
}
正如Andy所说,你需要一个const迭代器。 如果您的编译器支持C ++ 11,您的代码将变为:
template <typename T>
Vector< T >::Vector( const_iterator start, const_iterator end ) :
theSize( 0 ),
theCapacity( 1 )
{
array = new T[ theCapacity ];
for( auto itr = start; itr != end; itr++ ){
push_back( *itr );
}
}
我还要问:你确定要手动滚动自己的Vector吗? 你有充分的理由不使用std :: vector吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.