mysql matlab for循环嵌套循环语句吗_C++: for_each 和 基于范围的for循环
普通的for循環
for_each函數模板
基于范圍的for循環
普通用的像:
for(int?i?=?0;?i?
這種的for循環就不說了,?下面主要說一下后兩個,做個筆記。
以后用for循環可以考慮下使用后兩種方法!
對于C++中的for_each:
首先它實際上是一個函數模板,包含在這個頭文件中,它的原型如下:
template?
Function?for_each?(InputIterator?first,?InputIterator?last,?Function?fn);
for_each 的前兩個參數是迭代器,用來定義容器的一個區間,第三個參數是一個函數對象,直接把你定義的一個函數的函數名放到第三個參數的位置上也行。(那個迭代器可以簡單地理解為一個指針)
這個fn只能有一個參數,然后這個for_each就是把從 first 到 last 這個區間內的所有數據挨個帶入到函數 fn 中進行處理計算,fn的形參類型需要和容器中數據的類型一致。如果要修改容器中該范圍內的數據,需要把 fn 的形參寫成某某類型的引用。
舉例來說明
#include?
#include?
#include??//?using?for_each
void?modf1(int&);
void?show(const?int&);
int?main(){
//1.?用for_each來?對一個容器進行修改
std::vector?test1;
//???向test1容器中添加4個數
for?(int?i?=?0;?i?
test1.push_back(i?+?1);
std::cout?<
//用for_each?修改?和?展示?test1容器中的內容
std::cout?<
for_each(test1.begin(),?test1.end(),?show);?//展示原始的數據
for_each(test1.begin(),?test1.end(),?modf1);//修改原始的數據
std::cout?<
for_each(test1.begin(),?test1.end(),?show);?//展示修改后的數據
std::cout?<
std::cin.get();
std::cin.get();
return?0;
}
void?modf1(int&?r){
r++;
}
void?show(const?int&?r){
std::cout?<
}
運行結果:
還有再回憶下matlab中的arrayfun函數,可以看一下這篇推文:避免無用的循環——fun系列的另外三個函數
B?=?arrayfun(func,A)
感覺MATLAB中的這個函數也有點像這個for_each。arrayfun是直接把A中的所有元素都給func函數,而不要設一個區間。
對于C++中的 基于范圍的for循環(C++11中才有),為用于STL設計的。它的用法如下:
for?(type?x?:?container)
{
....
}
type是變量x的類型,而且type必須和container容器中的元素類型一致!然后循環體就可以使用指定的變量 x?來依次訪問容器container中的每個元素。還有就是這個container可以是容器,也可以是普通數組。
如果需要修改container中的元素,可以把這個 x 的類型變成type的引用,即type &?。
其實這個挺像Python中的for循環:
container?=?[1,?2,?3,?4]
for?i?in?container:
....body....
下面舉例說明
#include?
#include?
#include??//?using?for_each
void?modf1(int&);
void?show(const?int&);
int?main(){
//用一個普通數組作為容器
int?test[4]?=?{?1,?2,?3,?4,?};
std::cout?<
std::cout?<
for?(int&?x?:?test)
show(x);
//在這個循環中來修改test容器的元素值
for?(int&?x?:?test)
modf1(x);???//這個modf1的形參也必須是引用,不然沒法修改test中的元素
std::cout?<
for?(int&?x?:?test)
show(x);
std::cout?<
//用vector作為容器
std::vector?test1;
for?(int?i?=?0;?i?
test1.push_back(i?+?5);
std::cout?<
std::cout?<
for?(int&?x?:?test1)
show(x);
//在這個循環中來修改test1容器的元素值
for?(int&?x?:?test1)
modf1(x);???//這個modf1的形參也必須是引用,不然沒法修改test中的元素
std::cout?<
for?(int&?x?:?test1)
show(x);
std::cin.get();
std::cin.get();
return?0;
}
void?modf1(int&?r){
r++;
}
void?show(const?int&?r){
std::cout?<
}
結果:
總結
以上是生活随笔為你收集整理的mysql matlab for循环嵌套循环语句吗_C++: for_each 和 基于范围的for循环的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eureka java_spring c
- 下一篇: java对Oracle数据库查询_jav