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、自定义结构体等大对象避免性能浪费。

相关推荐
我还记得那天1 小时前
0 初识C++
开发语言·c++
FfHUCisI1 小时前
Go 编译过程全景
开发语言·后端·golang
FfHUCisI1 小时前
Golang 语法分析与 AST:Parser 与 go/ast
开发语言·后端·golang
lemon_sjdk2 小时前
ObjectProperty
java·开发语言·算法
大模型码小白2 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
hh9502 小时前
Agent Plan x DeepSeek Harness:Agent 供应链安全与第三方插件审计
java·开发语言·安全·agent plan·adg成都社区·adg社区
「QT(C++)开发工程师」3 小时前
C++ std::move 详解
开发语言·c++
matlab代码3 小时前
基于matlab的玉米种子计数设计(GUI界面)【源码58期】
开发语言·matlab