/*其中的 std::plus<int>() 可以省略,因为这将是3个参数的 accumulate 的默认行为 */
#include "stdafx.h"
#include <string>
#include <iostream>
#include <numeric>
#include <vector>
#include <algorithm>
#include <functional>
#include <map>
#include "boost/tuple/tuple.hpp"
#include "boost/tuple/tuple_comparison.hpp"
#include "boost/tuple/tuple_io.hpp"
#include "boost/array.hpp"
#include "boost/assign/list_of.hpp"
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
using namespace boost::lambda;
//#include <boost/bind.hpp>
class Person
{
public:
Person(){}
Person(const std::string& name) : name_(name){}
std::string& Name()
{ return name_; }
private:
std::string name_;
};
int main()
{
std::vector<int> vect1(4);
int i = 0;
std::for_each( vect1.begin(), vect1.end(), _1 = ++var(i) );
std::cout << "1. int Accumulate: " <<
std::accumulate( vect1.begin(), vect1.end(), 0, std::plus<int>()) << '\n';
std::vector<std::string> vect;
vect.push_back("1");
vect.push_back("2");
vect.push_back("3");
vect.push_back("4");
std::cout << "2. str Accumulate: " <<
std::accumulate( vect.begin(), vect.end(), std::string("0")) << '\n';
std::cout << "3. str Accumulate: " <<
std::accumulate( vect.begin(), vect.end(), std::string("0"),bind(std::plus<std::string>(),boost::ref(_1),_2+",")) << '\n';
std::cout << "4. for_each Accumulate: ";
std::string result("0");
std::for_each( vect.begin(), vect.end(), result += "," +_1 );
std::cout << result << '\n';
std::cout << "-------------------------------------"<< '\n';
std::map<int, std::string> persons;
persons[123] = "Amy";
persons[234] = "Ralph";
persons[345] = "Simon";
persons[456] = "Maggie";
std::cout << "5. map Accumulate: " <<
std::cout << std::accumulate( persons.begin(), persons.end(), 0,
bind(std::plus<int>(), _1, bind(&std::map<int, std::string>::value_type::first, _2)) )
<< '\n';
std::cout << "6. map Accumulate: " <<
std::cout << std::accumulate( persons.begin(), persons.end(), std::string(),
bind(std::plus<std::string>(), _1, bind(&std::map<int, std::string>::value_type::second, _2)) +"," )
<< '\n';
std::cout << "-------------------------------------"<< '\n';
std::map<int, Person> persons1;
persons1[123] = Person("Amy");
result = "";
std::for_each( persons1.begin(), persons1.end(),
result += bind(&Person::Name, bind(&std::map<int, Person>::value_type::second, _1)));
std::cout << "7. map Accumulate: " <<
std::cout << result << '\n';
return 0;
}
分享到:
相关推荐
如果被包围,那么这个六面体的体积就会被累加到总体积中。这个过程可以通过编程语言如Node.js来实现,这也是"node-stl.zip"可能提供的功能,它可能是一个用于处理和分析STL文件的Node.js库。 在实际应用中,除了...
STL(STereoLithography)格式是一种广泛用于3D打印和计算机辅助设计(CAD)的文件格式。它主要存储三维几何数据,分为文本STL和二进制STL两种形式。二进制STL文件通常比文本STL更小、加载更快,但可能不那么易于人...
STL指令集覆盖了广泛的指令类型,包括位逻辑指令、比较指令、转换指令、计数器指令、数据块指令、逻辑控制指令、数学运算指令(包括整型和浮点数)、装载和传送指令、程序控制指令、移位和循环指令、定时器指令、字...
该操作可以在程序控制中用于实现计数功能,例如计数、累加、累减等。 比较器运算 比较器运算是 STL 指令语言中的一种基本操作,用于执行比较运算。该操作包括大于、小于、等于、不等于、大于或等于、小于或等于等...
手册内容包含各类STL指令的描述和编程实例,例如位逻辑指令、比较指令、转换指令、计数器指令、数据块指令、逻辑控制指令、整型和浮点型数学运算指令、装载和传送指令、程序控制指令、移位和循环指令、定时器指令、...
西门子STL语言,全称Structured Text,是一种在PLC编程中常见的高级文本编程语言,主要用于西门子S7系列控制器。STL语言结构清晰,语法严谨,适合编写复杂的控制逻辑。以下是对STL语言及其相关知识点的详细说明: 1...
这些语言元素包含了位逻辑指令、比较指令、转换指令、计数器指令、数据块指令、逻辑控制指令、整数和浮点算术运算指令、装入和传送指令、程序控制指令、移位和循环移位指令、定时器指令、字逻辑指令、累加器操作指令...
根据给定的信息,我们可以深入探讨STL(Standard Template Library,标准模板库)中的几个关键概念与函数用法。STL是C++中的一个重要组成部分,它提供了丰富的数据结构和算法,可以极大提高编程效率。 ### STL简介 ...
- `accumulate`:累加容器中的所有元素。 此外,还有一些高级算法,如动态规划、回溯算法和贪心算法,虽然它们不是STL的一部分,但在解决复杂问题时非常有用。 #### 七、STL程序示例 以下是一个使用STL组件的示例...
4. 算法:STL提供了一组通用的算法函数,如`sort`(排序)、`find`(查找)、`transform`(转换)和`accumulate`(累加)。这些算法可以应用于任何支持迭代器的容器。 5. 功能对象(Functors):也称为仿函数,是...
### 如何阅读STL程序(西门子PLC) #### 概述 在自动化与驱动领域,可编程逻辑控制器(PLC)是实现工业过程控制的核心设备之一。西门子PLC广泛应用于各种自动化系统中,其中STL(Statement List)是一种基于文本的...
- **numeric algorithms**:数值算法,如累加、累乘、求平均值等。 - **容器适配器**:如`stack`(栈)、`queue`(队列)和`priority_queue`(优先队列),它们是基于其他容器实现的特定接口。 STL通过模板元编程...
### STL编程教程知识点详解 #### 一、STL编程概览 - **定义与作用**:STL(Statement List)是一种编程语言,主要用于为西门子S7-300和S7-400系列PLC编写控制程序。它符合IEC 1131-3标准中定义的“指令表”语言类型...
6. **数学算法**:如`accumulate()` 计算累加和,`min_element()` 和 `max_element()` 找到最小和最大元素。 四、函数对象(Function Objects) 函数对象,也称为仿函数,是具有操作行为的对象,常用于算法中的谓词。...
14. **累加器指令**:使用累加器进行多次计算,常用于累加和累乘。 15. **编程实例**:通过具体的例子展示如何使用这些指令。 16. **参数传送**:关于如何在程序中传递参数的说明。 手册还包含了所有STL指令的...
- **聚合操作**:如`accumulate`、`inner_product`、`reduce`等,对容器元素进行累加、乘积等计算。 - **变换和复制**:如`transform`、`copy`、`swap`,对元素进行转换或在容器间复制。 - **容器操作**:如`...
14. **累加器操作指令**:用于累加器的特殊操作,如累加器清零(CLR_A)等。 #### 四、编程示例与安全指南 - **编程示例**:手册中提供了实际的编程案例,帮助读者更好地理解和应用STL编程语言。 - **安全指南**:...
### 西门子STL介绍 #### 一、STL编程语言概述 STL(Statement List)编程语言,又称语句表或指令列表,是一种基于文本的编程方式,广泛应用于可编程逻辑控制器(PLC)的编程当中。西门子STL作为西门子PLC的一种编程...