基于范围的for循环
输出示例一
#include <iostream>
#include <string>
#include <vector>
#include <ctime>
using std::cout;
using std::endl;
using std::string;
using std::vector;
int main()
{
clock_t startTime=0,endTime=0;
startTime=clock();
string Number[]={"Hello World","Hello I am Sangni"};
string NumberA[2][2]={{"Hello My World","Hello I am Sangni"},
{"Yes I am sang","Hello I am computer"}};
vector<vector<string>> str(2,vector<string>(Number,Number+2));
//这里使用了vector容器的最后一个初始化函数
for (auto x : NumberA[0])
{//NumberA[0]为string数组第一行的地址,所以x将输出string数组第一行的两个元素
cout << x <<endl;
}
cout<<endl;
endTime=clock();
cout << "Run Time=" << (double)(endTime-startTime)<< "ms" << endl;
return 0;
}
- 输出如下所示

输出示例二
- 如果将输出的for循环改为如下所示,其他部分不做改变
#include <iostream>
#include <string>
#include <vector>
#include <ctime>
using std::cout;
using std::endl;
using std::string;
using std::vector;
int main()
{
clock_t startTime=0,endTime=0;
startTime=clock();
string Number[]={"Hello World","Hello I am Sangni"};
string NumberA[2][2]={{"Hello My World","Hello I am Sangni"},
{"Yes I am sang","Hello I am computer"}};
vector<vector<string>> str(2,vector<string>(Number,Number+2));
for (auto x : NumberA[0][0])
{//只有这里做了改动,将原来NumberA[0]变为了NumberA[0][0]
cout << x <<endl;
}
cout<<endl;
endTime=clock();
cout << "Run Time=" << (double)(endTime-startTime)<< "ms" << endl;
return 0;
}
- 输出结果如下

综上所述
- auto用于基于范围的for循环时,x将被初始化为与NumberA[0]相同的类别(对于示例一而言,示例二同理)。
输出示例三
使用基于范围的for循环时,循环中对元素的访问和操作
- C++面向对象的特性在这里有很好的体现,让我有一种在写MATLAB代码的错觉。C++真是一个伟大的语言。
#include <iostream>
#include <string>
#include <vector>
#include <ctime>
using std::cout;
using std::endl;
using std::string;
using std::vector;
int main()
{
clock_t startTime=0,endTime=0;
startTime=clock();
const char NumberB[]="Hello World";
string Number[]={"Hello World","Hello I am Sangni"};
string NumberA[2][2]={{"Hello World","Hello I am Sangni"},
{"Yes I am sang","Hello I am computer"}};
vector<vector<string>> str(2,vector<string>(Number,Number+2));
for (auto x : Number)
{
if (x==str[0][0])
{//这一句与MATAB中的用法极为相似
cout<< "二维vector string数组测试通过" <<endl;
}
if (x==NumberA[0][0])
{//这一句与MATAB中的用法极为相似
cout << "二维string数组测试通过"<<endl;
}
if (x==NumberB)
{//这一句与MATAB中的用法极为相似
cout<< "一维字符串常量数组测试通过"<<endl;
}
if (x=="Hello World")
{//这一句与MATAB中的用法极为相似
cout << "字符串常量测试通过"<<endl;
}
}
endTime=clock();
cout << "Run Time=" << (double)(endTime-startTime)<< "ms" << endl;
return 0;
}
输出结果:
- 上述代码中,x属于传值,更改x后并不会更改Number的内容。如果将循环条件改为如下所示:
for (auto &x:Number)//这里表示x传引用
{
//.....
//.....
//.....
}
此时更改x的同时,也会更改Number的内容。测试代码如下所示:
- 传值:(" for (auto x:Number) ")
#include <iostream>
#include <string>
#include <vector>
#include <ctime>
using std::cout;
using std::endl;
using std::string;
using std::vector;
int main()
{
clock_t startTime=0,endTime=0;
startTime=clock();
const char NumberB[]="Hello World";
string Number[]={"Hello World","Hello I am Sangni"};
string NumberA[2][2]={{"Hello World","Hello I am Sangni"},
{"Yes I am sang","Hello I am computer"}};
vector<vector<string>> str(2,vector<string>(Number,Number+2));
cout<<"更改前:"<<endl;
cout << "Number[0]="<<Number[0]<<endl;
cout << "Number[1]="<<Number[1]<<endl;
for (auto x:Number)
{
if (x=="Hello World")
x="Your are welcome";
if (x=="Hello I am Sangni")
x="Hello I am a computer";
}
cout<<"更改后:"<<endl;
cout << "Number[0]="<<Number[0]<<endl;
cout << "Number[1]="<<Number[1]<<endl;
endTime=clock();
cout << "Run Time=" << (double)(endTime-startTime)<< "ms" << endl;
return 0;
}
输出结果:
- 传引用:(" for (auto &x:Number) ")
#include <iostream>
#include <string>
#include <vector>
#include <ctime>
using std::cout;
using std::endl;
using std::string;
using std::vector;
int main()
{
clock_t startTime=0,endTime=0;
startTime=clock();
const char NumberB[]="Hello World";
string Number[]={"Hello World","Hello I am Sangni"};
string NumberA[2][2]={{"Hello World","Hello I am Sangni"},
{"Yes I am sang","Hello I am computer"}};
vector<vector<string>> str(2,vector<string>(Number,Number+2));
cout<<"更改前:"<<endl;
cout << "Number[0]="<<Number[0]<<endl;
cout << "Number[1]="<<Number[1]<<endl;
for (auto &x:Number)
{
if (x=="Hello World")
x="Your are welcome";
if (x=="Hello I am Sangni")
x="Hello I am a computer";
}
cout<<"更改后:"<<endl;
cout << "Number[0]="<<Number[0]<<endl;
cout << "Number[1]="<<Number[1]<<endl;
endTime=clock();
cout << "Run Time=" << (double)(endTime-startTime)<< "ms" << endl;
return 0;
}
输出结果:
版权声明:本文为weixin_37843779原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。