鱼C论坛

 找回密码
 立即注册
查看: 5246|回复: 10

这是C++的什么语法??

[复制链接]
发表于 2013-8-13 23:34:09 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 565123 于 2013-8-13 23:35 编辑

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <vector>

  4. using namespace std;

  5. int main()
  6. {
  7.         vector<int> v;
  8.         for (int i = 0; i < 10; ++i) {
  9.                 v.push_back(i);
  10.         }

  11.         int evenCount = 0;
  12.         for_each(v.begin(), v.end(), [&evenCount](int n){cout << n << " is " << ((n % 2 == 0) ? "even" : "odd") << ".\n"; });

  13. }

复制代码


输出
0 is even.
1 is odd.
2 is even.
3 is odd.
4 is even.
5 is odd.
6 is even.
7 is odd.
8 is even.
9 is odd.


最佳答案

查看完整内容

其实和下面的代码是一样的,只不过很多时候像test这样的小函数仅仅使用一次,因此希望在调用它的地方直接写出它的定义,且不需要给出函数名---于是就有了lambda表达式。这种表达式仅仅适合使用在函数定义体很短的时候,太长的话影响人们理解,还不如直接使用函数(或函数对象)。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-13 23:34:10 | 显示全部楼层
其实和下面的代码是一样的,只不过很多时候像test这样的小函数仅仅使用一次,因此希望在调用它的地方直接写出它的定义,且不需要给出函数名---于是就有了lambda表达式。这种表达式仅仅适合使用在函数定义体很短的时候,太长的话影响人们理解,还不如直接使用函数(或函数对象)。
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <vector>
  4. using namespace std;

  5. void test(int n) {
  6.         cout << n << " is " << ((n % 2 == 0) ? "even" : "odd") << ".\n";
  7. }

  8. int main()
  9. {
  10.         vector<int> v;
  11.         for (int i = 0; i < 10; ++i) {
  12.                 v.push_back(i);
  13.         }
  14.         int evenCount = 0;
  15.         //for_each(v.begin(), v.end(), [&evenCount](int n){cout << n << " is " << ((n % 2 == 0) ? "even" : "odd") << ".\n"; });
  16.                 for_each(v.begin(),v.end(),test);
  17. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-14 09:01:10 | 显示全部楼层
传说中的luma表达式???很高端啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-14 09:37:05 | 显示全部楼层
for_each是一个函数模板,source如下:
template<typename InputIterator, typename Function>
Function for_each(InputIterator beg, InputIterator end, Function f)
{
     while(beg != end)
    {
        f(*beg++);
    }
}
而这句((n % 2 == 0) ? "even" : "odd") 是条件运算符(或称问号运算符,是一个三目运算符),意义式:  
   条件 ? 条件成立时运行的表达式1 : 条件不成立是运行的表达式2
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-14 09:41:31 | 显示全部楼层
是C++的容器
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-15 03:34:25 | 显示全部楼层
这个应该就是C++ 的STL编程吧。用到了vectoer 容器
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-15 13:54:05 | 显示全部楼层
这是java中一样的容器
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-16 23:09:50 | 显示全部楼层
今天第1次见到,长见识了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-16 23:12:25 | 显示全部楼层

请问一下,[]里面的&eventCount有啥作用
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-17 08:02:15 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-17 08:29:15 | 显示全部楼层
仰望天上的光 发表于 2013-8-17 08:02
http://www.cnblogs.com/allenlooplee/archive/2012/07/03/2574119.html

谢谢了!C++还真是博大精深,比其他语言还冗杂
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-17 06:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表