C++中const迭代器和const_iterator的区别

const迭代器,就是不能改变的迭代器,是常量,类似指针常量,不能改变指向的地址,但是可以改变指向地址的内容。

例如:

 vector<int> vv(10,9);  
 const vector<int> :: iterator iter = vv.begin();  

如果出现:

 ++iter;//报错

就会报错,因为iter是一个常量,因此不能改变。换句话说,iter只能指向vv的第一个元素,不能指向其他的元素。
所以,就可以出现以下:

*iter = 10;//正确

因为虽然iter不能指向其他的元素,但是其指向的第一个元素的值是可以改变的。



对于const_iterator来说的话,正好相反。

例如:

vector<int> vv(10,9);  
vector<int> ::const_iterator iter ;  

定义了一个const_iterator迭代器。这个迭代器是可以递增的,但是指向的元素的值是不可以改变的。比如:

for(iter = vv.begin(); iter != vv.end(); ++iter){  
      cout << *iter << endl;  
}  //这是正确的,iter本身的值是可以改变的

但是

for(iter = vv.begin(); iter != vv.end(); ++ iter){  
   *iter = 0;  
}//这是错误的

因为 const_iterator迭代器是不能改变其所指向的元素的值的。
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前插型迭代器front_insert_iterator是STL的一种迭代器类型,用于将元素插入容器的头部而不是尾部。它可以适用于所有支持push_front操作的容器,如list和deque等。 使用前提:需要使用一个支持push_front操作的容器,如list或deque。 定义方法:可以通过以下方式定义一个前插型迭代器front_insert_iterator: ``` template <typename Container> class front_insert_iterator { public: // 构造函数,接受一个容器作为参数 explicit front_insert_iterator(Container& x) : container(&x) {} // 重载运算符* front_insert_iterator& operator*() { return *this; } // 重载运算符++ front_insert_iterator& operator++() { return *this; } // 重载运算符++(后缀) front_insert_iterator operator++(int) { return *this; } // 重载运算符= front_insert_iterator& operator=(const typename Container::value_type& value) { container->push_front(value); return *this; } private: Container* container; }; ``` 其,Container是容器的类型,value_type是容器存储的元素类型。通过以上定义,就可以使用front_insert_iterator将元素插入容器的头部了。例如,可以通过以下方式将元素插入list的头部: ``` #include <iostream> #include <list> #include <iterator> using namespace std; int main() { list<int> mylist = {1, 2, 3, 4, 5}; front_insert_iterator<list<int>> myfront(mylist); *myfront = 6; ++myfront; *myfront = 7; for (auto i : mylist) { cout << i << " "; } return 0; } ``` 输出结果为:7 6 1 2 3 4 5。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值