青田建设局网站,网络营销有哪些功能,企业网站建设实训指导书,湘潭做网站价格找磐石网络一流目录
一#xff0c;范围for介绍
二#xff0c;范围for注意事项 一#xff0c;范围for介绍 范围for#xff08;range-based for loop#xff09;是C11新引入的特性#xff0c;可遍历各种序列结构的容器#xff08;如数组、vector、list等#xff09;#xff1b;每次循…目录
一范围for介绍
二范围for注意事项 一范围for介绍 范围forrange-based for loop是C11新引入的特性可遍历各种序列结构的容器如数组、vector、list等每次循环都会将序列中的下一个元素赋值给声明的变量直到循环结束
//element_declaration 声明循环变量的类型和名字
//sequence 是一个序列结构例如数组、向量、列表等或具有迭代器接口的对象;
for ( element_declaration : sequence ) {// 循环体
} 使用条件 范围for迭代的范围需确定迭代的对象要实现和操作 原理是通过序列的迭代器来遍历其中的元素编译器会自动处理迭代器的初始化、增量及结束等细节无需手动操作 int main()
{listint li { 1,2,3,4 };for (auto i : li)cout i ;return 0;
} 数组也是序列结构可通过模板函数begin/end获取相应的迭代器 container (1) template class Containerauto begin (Container cont) - decltype (cont.begin());template class Containerauto begin (const Container cont) - decltype (cont.begin());
array (2) template class T, size_t NT* begin (T(arr)[N]);
container (1) template class Containerauto end (Container cont) - decltype (cont.end());template class Containerauto end (const Container cont) - decltype (cont.end());
array (2) template class T, size_t NT* end (T(arr)[N]);
int main()
{int arr[] { 1, 2, 3, 4, 5 };for (int* ptr begin(arr); ptr ! end(arr); ptr)std::cout *ptr ;return 0;
} 二范围for注意事项 范围for迭代的范围是确定的所以无需担心下班越界可遍历定义了begin() 和 end() 方法的对象如vector,set,list,map,queue,deque,string不可使用指针如new生成的数组作为循环结构里的序列由于数组在遍历的时候会转换成指针所以在遍历多维数组的时候除最内层循环外其他所有循环的控制变量都要使用引用的形式。 class myclass
{
public://需定义begin、end这两个成员函数才可使用范围forint* begin() { return arr; } int* end() { return arr 4; }
private:int arr[4] { 1,2,3,4 };
};int main()
{myclass li;for (auto i : li)cout i ;return 0;
}
int main()
{int arr[] { 1, 2, 3, 4, 5 };for (auto i : arr)std::cout i ;return 0;
}
int main()
{int* parr new int[5];//parr无合适的begin函数报错for (auto i : parr)std::cout i ;return 0;
}
int main()
{int arr[2][3] { {1,2,3},{4,5,6} };//row的类型为int*即arr内每个元素的首元素地址for (auto row : arr) cout row ;//row的类型为int[3]即arr内每个元素的类型for (auto row : arr)cout row ;//其中最内层的循环col类型为int[3]是数组for (auto row : arr)for (auto col : row) //col的类型为intcout col ;return 0;
}