C++ 11 常用for循环

C++11 常用 for 循环

1. 范围 for 循环(range-based for)--- C++11 核心新特性

最常用,遍历容器元素最简洁:

cpp 复制代码
// 只读访问
QVector<int> values = {1, 2, 3, 4, 5};
for (int v : values) {
    qDebug() << v;
}

// 引用修改(推荐 auto &)
for (auto &v : values) {
    v *= 2;  // 修改原元素
}

// 只读引用,避免拷贝(适合大对象如 QString)
for (const auto &v : stringList) {
    qDebug() << v;
}

2. 传统 for 循环 + auto

cpp 复制代码
QList<QString> names = {"Alice", "Bob"};
for (auto i = 0; i < names.size(); ++i) {
    qDebug() << names.at(i);
}

3. 迭代器 for 循环

cpp 复制代码
// STL 迭代器风格
QMap<QString, int> scoreMap = {{"Alice", 90}, {"Bob", 85}};
for (auto it = scoreMap.begin(); it != scoreMap.end(); ++it) {
    qDebug() << it.key() << it.value();
}

// 只读迭代器
for (auto it = scoreMap.cbegin(); it != scoreMap.cend(); ++it) {
    qDebug() << it.key() << it.value();
}

4. 范围 for 遍历 QMap(C++17 结构化绑定更佳,C++11 用 auto)

cpp 复制代码
// C++11 中 QMap 不能直接 range-for 取键值对
for (const QString &key : scoreMap.keys()) {
    qDebug() << key << scoreMap.value(key);
}

选择建议

场景 推荐写法
遍历读元素 for (const auto &e : container)
遍历改元素 for (auto &e : container)
需要索引 传统 for + auto i
需要键值对 迭代器 for (auto it = ...)

关键原则 :能用 const auto & 就别用值拷贝 auto,对 QString、自定义结构体等大对象避免性能浪费。

相关推荐
2501_944521593 小时前
Ramda 跨端三方库仓颉适配全流程
开发语言·javascript·flutter·php
行思理3 小时前
go语言学习难度及适合学习的人群
开发语言·学习·golang
青瓦梦滋3 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
wangchunyu1145 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
程序 代码狂人6 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
meiying88387 小时前
快递单号批量查询Python脚本:从手动到自动化的完整实现
开发语言·python·自动化
@大迁世界8 小时前
告别 Go,拥抱 Rust
开发语言·golang·rust
SEO_juper8 小时前
Node.js 重定向链检测工具:301 跳了几跳、有没有成环,一次看清
xml·开发语言·python·node.js·json·bash
学逆向的8 小时前
C 指针常量与常量指针
c语言·开发语言·网络安全
低调滴开发9 小时前
3 行代码写崩一个函数?切片才是 Rust 字符串处理的正确姿势
开发语言·后端·rust