C++中的范围-based for循环

本主题将讨论C++编程语言中的范围-based for循环。C++语言在C++11及更高版本中引入了范围-based for循环的概念,它比常规的for循环更好。范围-based for循环不需要大量的代码来实现循环迭代。它是一个顺序迭代器,遍历容器中的每个元素(从开始到结束)。

1.png

语法

for (range_declaration : range_expression) 循环语句 
  • range_declaration:用于声明一个变量,其类型与range_expression表示的集合元素的类型相同或引用该类型。
  • range_expression:定义表示适当序列的表达式。
  • 循环语句:定义范围-based for循环的主体,其中包含一个或多个语句,这些语句将重复执行,直到range_expression结束。

注意:如果我们不知道容器元素的数据类型,可以使用auto关键字自动识别range_expression的数据类型。

使用范围-based for循环打印数组的每个元素的程序

让我们考虑一个在C++中使用范围-based for循环打印int和double数组的示例。

program.cpp

#include <iostream>
using namespace std;
int main ()
{
    int arr1 [5] = { 10, 20, 30, 40, 50};
    double darr [5] = { 2.4, 4.5, 1.5, 3.5, 4.0 };

    // 使用范围-based for循环
    for (const auto &var : arr1)
    {
        cout << var << " ";
    }
    // 使用auto关键字自动指定darr容器的数据类型。
    for (const auto &var : darr)
    {
        cout << var << " ";
    }
    return 0;
}

输出

10 20 30 40 50 
2.4 4.5 1.5 3.5 4.0

使用范围-based for循环演示向量

让我们编写一个简单的程序,使用范围-based for循环实现向量。

Program2.cpp

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int x; // 声明整数变量
    // 声明向量变量
    vector<int> vect = {5, 10 , 25, 20, 25};

    // 显示向量元素
    for (int x : vect)
    {
        cout << x << " ";
    }
    return 0;
}

输出

5 10 25 20 25

使用范围-based for循环打印数组的程序(带有引用)

让我们考虑一个使用范围-based for循环打印数组元素的示例。

Program3.cpp

#include <iostream>
#include <array>
#include <cstdlib>
using namespace std;

int main(){
    array<int, 7> data = {1, 3, -2, 4, 6, 7, 9};
    cout << " 在更新元素之前:" << endl;
    for (int x : data){
        cout << x << " ";
    }
    // 传递引用
    for (int &itemRef : data){
        itemRef *= 3;
    }
    cout << endl << " 更新元素之后:" << endl;
    for (int x : data){
        cout << x << " ";
    }
    cout << endl;
    return 0;
}

输出

在更新元素之前: 
1 3 -2 4 6 7 9 
更新元素之后: 
3 9 -6 12 18 21 27

嵌套的范围-based for循环

当一个循环在另一个循环的主体内部定义时,该循环被称为嵌套循环。类似地,当我们在一个范围-based for循环内部定义了一个范围,这种技术被称为嵌套的范围-based for循环。

语法:

for (int x : range_expression) // 外部循环 
{ 
  for (int y : range_expression) // 内部循环 
  { 
    // 要执行的语句 
  } 
  // 要执行的语句 
} 

在上述语法中,我们在循环的主体内定义了一个范围-based for循环。这里我们在C++中调用内部和外部范围-based for循环。

在C++中打印嵌套的范围-based for循环的程序

考虑一个示例,演示C++编程语言中的嵌套范围-based for循环。

Range.cpp

#include <iostream>
using namespace std;
int main ()
{
    int arr1[4]  = { 0, 1, 2, 3 };
    int arr2[5] = { 1, 2, 3

Range.cpp

#include <iostream>
using namespace std;
int main ()
{
int arr1[4] = { 0, 1, 2, 3 };
int arr2[5] = { 1, 2, 3, 4, 5 };
// 使用嵌套的范围循环 for (int x : arr1)
{
// 声明嵌套循环 for (int y : arr2)
{
cout << " x = " << x << " and j = " << y << endl;
}
}
return 0;
}

输出:

x = 0 and j = 1 
x = 0 and j = 2 
x = 0 and j = 3 
x = 0 and j = 4 
x = 0 and j = 5 
x = 1 and j = 1 
x = 1 and j = 2 
x = 1 and j = 3 
x = 1 and j = 4 
x = 1 and j = 5 
x = 2 and j = 1 
x = 2 and j = 2 
x = 2 and j = 3 
x= 2 and j = 4 
x = 2 and j = 5 
x = 3 and j = 1 
x = 3 and j = 2 
x = 3 and j = 3 
x = 3 and j = 4 
x = 3 and j = 5

传统的for循环和基于范围的for循环有什么区别?

传统的for循环用于重复执行代码块,直到指定的条件为真。传统的for循环有三个参数:变量的初始化、指定条件以及最后一个参数是计数器,如果条件仍然为真,则计数器递增一。

语法:

for (变量初始化; 指定条件; 更新计数器) 
{ 
  // 要执行的语句; 
} 

基于范围的循环c

另一方面,C++ 11及更高版本中引入了一种新的基于范围的for循环。它有两个参数:范围声明和范围表达式。它也用于重复执行一段代码,但在一定范围内。

语法:

for (范围声明 : 范围表达式) 
{ 
  循环语句; 
    // 要执行的语句; 
} 

范围声明用于声明与范围表达式(容器)相关的变量的类型。范围表达式类似于一个容器,按顺序保存相同类型的元素。循环语句定义了在for循环内执行的语句。

基于范围的for循环的优点

  • 易于使用,语法简单。
  • 基于范围的for循环不需要计算容器中元素的数量。
  • 它能识别容器的起始和结束元素。
  • 我们可以轻松修改容器的大小和元素。
  • 它不会创建元素的副本。
  • 它比传统的for循环更快。
  • 它通常使用auto关键字来识别容器元素的数据类型。

基于范围的for循环的缺点

  • 无法遍历列表的部分元素。
  • 无法以逆序遍历。
  • 无法在指针上使用。
  • 无法获取当前元素的索引值。

标签: C++语言, C++语言教程, C++语言技术, C++语言学习, C++语言学习教程, C++语言下载, C++语言开发, C++语言入门教程, C++语言进阶教程, C++语言高级教程, C++语言面试题, C++语言笔试题, C++语言编程思想