2017-09-28 50 views
-6

我在线复制了此代码。它是关于排序大的数字:比较std :: sort()中的内联函数

int n; 
cin >> n; 
vector<string> a(n); 
for (int i = 0; i < n; i++) { 
    cin >> a[i]; 
} 
std::sort(a.begin(), a.end(), 
    [](const string &left, const string &right) 
{ 
    if (left.size() != right.size()) 
    { 
     return left.size() < right.size(); 
    } 
    else 
    { 
     return left < right; 
    } 
}); 
for (const string &s : a) { 
    cout << s << '\n'; 
} 

有人可以用文字解释这些行:

[](const string &left, const string &right) 

for (const string &s : a) 

我从来没有遇到过的图书馆,以及一个像循环使用的代码。 谢谢!

+0

[第一次](https://stackoverflow.com/questions/7627098/what-is-a-lambda-expression-in-c11/7627218#7627218),[second](https://stackoverflow.com/问题/ 15927033/what-is-correct-way-of-using-c11s-range-based-for) –

回答

0

阅读关于C++11的更多信息,至少(或C++14C++17),例如一些好的C++ programming book(早于C++ 11的任何标准都已经过时,而C++ 11自从它的前辈已经发展了很多,所以你应该几乎将C++ 11视为一种新的编程语言)。看看也有一些C++ reference网站。

[](const string &left, const string &right)开始lambda expression,即anonymous function实现为closure

然后你有一个range-for循环:for (const string &s : a)它甚至可以是​​或在您的情况for (auto s: a)因为auto specifier带来的type inference限量表。

另请参阅SICP以改善您对编程的看法(这不是关于C++,而是一个优秀且可自由下载的编程入门)。

+0

谢谢你的回答。这只是因为我不知道关键词“lambda表达式”谷歌,我不得不寻求帮助。 –

+0

花时间阅读SICP。它会改善你的C++编码风格 –

相关问题