for遍历

发布时间 2023-10-14 14:04:22作者: 一只傲娇璇

for遍历

一:常规方式

1.遍历数组

int arr[10] = {1,2,3,4,5,6,7,8,9,10};
for(int i = 0;i<10;i++)
{
	cout<<arr[i];
}

3.遍历容器类(迭代器)

vector<int> s = {0,1,2,3,4,5,6,7,8,9};
for(vector<int>::iterator iter = s.begin();iter!=s.end();iter++)|
{
	cout<<*iter;C
}

用vector::iterator iter建立一个指向第一个元素的迭代器,当迭代器没有指向最后一个元素时,就++

利用*iter去访问iter所指向的元素

二:利用C++11新特性

1.只查看值(auto n : arr)

int arr[10] = {1,2,3,4,5,6,7,8,9,10};
for(auto n : arr)//自动获取元素的类型,当元素为空时,就结束循环
{
	cout<<n;
}
vector<int> vec = {1,2,3,4,5,6,7,8,9,10};
for(auto n : vec)
{
	cout<<n;
}

2.需要改变值(auto &n : arr)

vector<int> s = {0,1,2,3,4,5,6,7,8,9};
for(auto &n :s)//将auto n修改为auto &n
{
    cout<<++n;//可以对元素进行修改
}

案例:

vector<int> s = {0,1,2,3,4,5,6,7,8,9};
cout<<"修改前";
for(auto &n : s)//利用&n
{
	cout<<n++;//修改n
}
cout<<endl;
cout<<"修改后";
for(auto n : s)
{
	cout<<n;
}
cout<<endl;

以上的代码输出为

图片1

注意事项:

1.不要在循环内部去修改容器,会导致程序崩溃

vector<int> s = {0,1,2,3,4,5,6,7,8,9};
for(auto n : s)
{
	cout<<n;
    s.push_back(1);
}

在循环内修改函数,导致迭代器失效,程序报错,报错如下

image-20231014134056290

2.如果不是一个容器,而是一个函数,该函数只会被调用一次

3.注意容器自身性质的影响,比如stack就无法直接用auto遍历整个容器