比较std :: sort()中的内联函数

时间:2017-09-28 05:25:25

标签: c++ sorting

我在线复制了这段代码。它是关于排序大数字:

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)

我从来没有遇到过库以及像所用代码一样的for循环。 谢谢!

1 个答案:

答案 0 :(得分: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 (const auto& s: a)for (auto s: a),因为auto specifier带来了有限形式的type inference {3}}

另请阅读SICP以改进您对编程的看法(它不是关于C ++,而是一本优秀且可免费下载的编程简介)。