私はそれのようないくつかのコードを使用し、ラムダ式があります。ラムダ式に<functional>が必要ですが、関数<void()>が必要なのはなぜですか?
#include <vector>
#include <algorithm>
int main(){
std::vector<int> vi={3,1};
std::sort(vi.begin(),vi.end(),[](int x,int y){
return x<y;
});
return 0;
}
コンパイルする#include< functional>
が必要ですが、私はラムダ関数格納する変数を使用する場合はありません:
#include <vector>
#include <algorithm>
#include <functional>
int main(){
std::vector<int> vi={3,1};
std::function<void()> compf=[](int x,int y){
return x<y;
};
std::sort(vi.begin(),vi.end(),compf);
return 0;
}
をその後、私は必要なのコンパイルするには<functional>
を含めるには、なぜですか?そして、なぜsort()
に<functional>
も含まれていないのですか?
ラムダがstd ::関数であるという印象を受けていますか?そうではありません;あなたが 'compf'にそれを保存すると、変換があります。 – user2357112
ラムダ式は言語の一部です。 'std :: function'は標準ライブラリの一部であるため、ヘッダincludeが必要です。 –
@PaulRooney、for(int i:{1、2、3}) 'はまた、明示的な標準ライブラリの使用にもかかわらず、ヘッダインクルードを必要とします。 – chris