const iterator与const_iterator

每一种容器类型都定义了自己的迭代器类型。

      以vector容器为例:  vector<int>::iterator iter;

      另外,每种容器类型还定义了一种const_iterator的类型,该类型只能用于读取容器内元素,但不能改变其值

      for ( vector< string >::const_iterator iter = test.begin() ; iter != test.end(): ++iter)

                 cout<< *iter << end;             // 正确

                 但如果想改变其值:

                 *iter  = "";                             // 错误

 

      再看const 的 iterator:声明一个const的迭代器时就必须初始化,之后就不能改变它的值:

      vector<int> nums(10);

      const vector<int>::iterator cit = nums.begin();

      *cit = 1;                                            // 正确

      ++cit ;                                               // 错误

### Qt 中 `const_iterator` 的使用方法 在 C++ 和 Qt 编程中,容器类通常提供迭代器来遍历其内部存储的元素。为了防止意外修改容器中的元素,在访问只读数据时应使用 `const_iterator`。 #### 使用 `const_iterator` 当定义一个常量对象或函数参数声明为常量引用时,只能通过 `const_iterator` 来遍历该对象: ```cpp #include <QVector> #include <iostream> void printValues(const QVector<int>& vec) { // 获取 const_iterator 类型的起始位置 auto it = vec.cbegin(); // 或者使用 vec.constBegin() while (it != vec.cend()) { // cend() 返回指向末尾之后的位置 std::cout << *it << " "; ++it; } } ``` 上述代码展示了如何利用成员函数 `cbegin()` 和 `cend()` 创建一对 `const_iterator`,用于安全地读取向量的内容[^1]。 #### 基于范围的 for 循环 `const_iterator` 如果希望简化语法并保持不可变性,则可以采用基于范围的 for 循环配合右值引用的方式实现相同功能: ```cpp // 定义一个只读版本的打印函数 void printValuesRangeBased(const QVector<int> &vec) { for (auto&& val : vec) { qDebug() << val; } } // 或者更严格地指定为 const 引用 for (const int& element : vec) { qDebug() << element; } ``` 这里不仅限定了变量的作用域,还确保了不会无意间改变原始集合内的任何项。 #### 实际应用场景下的注意事项 尽管 `QLinkedList` 提供了一些特性使其适用于特定场景,但在多线程环境中操作共享资源时需格外小心。虽然存在像 `QSemaphore` 这样的同步机制可以帮助管理并发访问,但这并不意味着可以直接依赖它们代替标准 STL 容器的选择[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值