当前位置: 首页 > news >正文

域名解析好了怎么做网站网站建设的公司资质

域名解析好了怎么做网站,网站建设的公司资质,wordpress照片页面,站长工具综合查询目录 一、传统遍历方式的局限性 二、基于范围的for循环语法 基本语法 三、使用示例 1、遍历数组 2、遍历标准容器 3、使用auto自动推导类型 4、修改容器元素 四、使用条件 1、迭代范围必须明确 2、迭代对象需要支持迭代器操作 五、底层实现原理 工作原理 六、注意…

目录

一、传统遍历方式的局限性

二、基于范围的for循环语法

基本语法

三、使用示例

1、遍历数组

2、遍历标准容器

3、使用auto自动推导类型

4、修改容器元素

四、使用条件

1、迭代范围必须明确

2、迭代对象需要支持迭代器操作

五、底层实现原理

工作原理

六、注意事项

1、引用与拷贝:

2、临时范围表达式:

3、不支持的情况:

4、性能考虑:

5、重点:

七、自定义类型支持


一、传统遍历方式的局限性

在C++98中,遍历数组通常采用以下方式:

int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};// 将数组元素值全部乘以2
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {arr[i] *= 2;
}// 打印数组中的所有元素
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {cout << arr[i] << " ";
}
cout << endl;

这种传统方式存在几个问题:

  1. 需要手动计算数组长度

  2. 循环控制变量(i)需要显式声明和管理

  3. 容易产生越界错误

  4. 代码冗长,意图不够直观


二、基于范围的for循环语法

        基于范围的for循环(range-based for loop)是C++11引入的一种简化循环语法,它提供了一种更简洁的方式来遍历容器或数组中的所有元素。

基本语法

for (declaration : range_expression) {// 循环体
}

其中:

  • declaration(声明部分):定义一个变量,每次迭代时它会被初始化为当前元素的值,通常使用auto自动推导类型

  • range_expression(范围部分:表示要遍历的序列(如数组、容器等)

  • for (声明 : 范围) 是基本语法结构

  • 可以使用continue结束本次循环,或break跳出整个循环

int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};// 将数组元素值全部乘以2
for (auto& e : arr) {e *= 2;
}// 打印数组中的所有元素
for (auto e : arr) {cout << e << " ";
}
cout << endl;

三、使用示例

1、遍历数组

int arr[] = {1, 2, 3, 4, 5};for (int num : arr) {cout << num << " ";
}
// 输出: 1 2 3 4 5

2、遍历标准容器

std::vector<std::string> words = {"Hello", "World", "C++"};for (const auto& word : words) {cout << word << " ";
}
// 输出: Hello World C++

3、使用auto自动推导类型

std::list<double> values = {1.1, 2.2, 3.3};for (auto value : values) {cout << value << " ";
}
// 输出: 1.1 2.2 3.3

4、修改容器元素

std::vector<int> nums = {1, 2, 3};for (auto& num : nums) {num *= 2;  // 修改元素
}// nums现在是 {2, 4, 6}

四、使用条件

1、迭代范围必须明确

  • 对于数组:编译器能确定首元素和末元素的位置

  • 对于类:需要提供begin()end()方法,定义迭代范围

2、迭代对象需要支持迭代器操作

  • 迭代器需要实现++(前进)和==(比较)操作

  • 实际上,任何提供了begin()end()方法并返回迭代器的类型都可以使用范围for


五、底层实现原理

范围for循环的底层实现基于迭代器:

  • 对于数组:转换为传统的指针遍历

  • 对于容器:转换为使用该容器的迭代器进行遍历

  • 可以通过查看汇编代码验证这一实现方式

工作原理

基于范围的for循环在底层会被编译器转换为传统的迭代器循环。例如:

for (auto& item : container) {// ...
}

大致等价于:

{auto&& __range = container;auto __begin = begin(__range);auto __end = end(__range);for (; __begin != __end; ++__begin) {auto& item = *__begin;// ...}
}

六、注意事项

1、引用与拷贝

  • 使用auto item会创建元素的拷贝

  • 使用auto& item会创建元素的引用(可修改原元素)

  • 使用const auto& item会创建常量引用(不可修改原元素)

2、临时范围表达式

for (auto x : getTemporaryVector()) { /* ... */ }  // 临时对象会延长生命周期

3、不支持的情况

  • 不能用于指针数组(除非知道数组大小)

  • 不能用于动态分配的数组

  • 不能用于不提供begin()/end()成员或自由函数的类型

4、性能考虑

  • 对于简单类型,使用autoauto&性能差异不大

  • 对于复杂类型,避免不必要的拷贝

5、重点:

  1. 当需要修改元素时,迭代变量应声明为引用类型(使用&

  2. 对于不需要修改的只读访问,使用非引用形式更高效

  3. 范围for循环不支持直接获取当前元素的索引位置

  4. 在循环过程中不应修改容器的大小(如添加/删除元素)

        基于范围的for循环大大简化了集合遍历的代码,提高了可读性和安全性,是现代C++编程中推荐使用的遍历方式。


七、自定义类型支持

要让自定义类型支持基于范围的for循环,需要提供begin()end()成员函数或自由函数:

class MyContainer {int data[5] = {1, 2, 3, 4, 5};
public:int* begin() { return data; }int* end() { return data + 5; }// 也可以提供const版本
};MyContainer c;
for (int x : c) {cout << x << " ";
}
http://www.dtcms.com/a/421909.html

相关文章:

  • p2p借贷网站开发 论文做跨境电商开店流程
  • 四川旅游seo整站优化以下区域不属于官方网站
  • 设计公司网站什么重要建设新北川网站
  • wix做的网站能扒下来网站开发工程师缺口
  • 养老网站建设合同优惠券网站做代理怎么样
  • iis默认网站路径网站建设佰金手指科杰二五
  • 个人备案能做公司网站吗表格制作手机软件
  • 做暧暖ox网站长沙建设教育网
  • 成功网站管理系统淘宝客网站如何做
  • 如何让网站收录滨海企业做网站多少钱
  • 内部网站建设计划做网站必备
  • 网站域名管理权限wordpress 简洁 模板
  • 网站云解析域名解析crm客户关系管理系统源码
  • 网站备案授权书模板wordpress豆瓣主题
  • 自己做网站能宣传自己的产品吗网站建设与管理规划书
  • 在凡科做网站编辑上海知名网站开发公司
  • 大学个人网站期末作业上海市建设安全协会网站j
  • 精品课程网站建设 公司行业网站开发方案
  • 公司网站设计哪家公司好郑州专门做喷绘安装的网站
  • pc建站家电网站设计方案
  • 在线图片处理网站国家反诈中心app下载安卓版
  • 例点估算网站开发项目工作量万能素材网站下载
  • 网站如何跳转网站的关键词推扩是怎样做
  • 新手如何做网站维护做挂广告网站
  • 济南网站建设方案书范文金融行业高端网站制作
  • 南城网站建设公司策划平台网站建设源码
  • 网站建设收费标准不一烟台专业的网站建站公司
  • wordpress h1做搜狗pc网站优化排
  • dw班级网站建设网站的分析
  • 嘉兴专业网站建设网站建设平台方案