C++ STL for_each 的用法?

作者&投稿:罗空 (若有异议请与网页底部的电邮联系)
c++ stl中的for_each里写着return (_fn1),为什么能这样写。~

空格和没有空格的区别

链表的内存结构是循环的,每一个节点(node)结构,node结构包含一个指向之前节点的指针,另外一个指向之后的节点,以及一个数据元素(你这里是int)——所以一个node结构自己是不知道自己是list中的第几个(没有储存相应的信息)。
但是,最末一个node,它的后指针是指向链表的终结记号,然后终结记号的node也有一个指针,才指向list的第一个node。所以你++it指向的是终结记号,上面是没有数据的,当然输出错误。
说双向的意思是:你可以在首端加入新的数据node,也可以在末端加入新的数据node,但不表示你可以无限循环的遍历它。
另外,List模板,不建议你使用iterator(迭代器),因为每一个node都不知道自己是第几个node,如果你使用迭代器指定你要访问第n个node的数据,它总是从首元素开始一个个数到第n,然后才返回数据给你。最好把链表当作动态的栈来使用,只访问或者增删头端或者尾端的数据,这样速度快。

for_each第三个参数传入的是函数名称,通过模板生成代码后的函数指针,for_each需要调用,可以看看STL的for_each函数的源码。
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <iterator>
using namespace std;

void print(int a)
{
cout << a <<"\t";
}

class myInt
{
public:
void operator()(int x)
{
cout << x << "\t";
}
};

template<int thevalue>
void add(int &ele)
{
ele += thevalue;
}

class AddValue
{
private :
int thevalue;
public:
AddValue(int va) : thevalue(va)
{
}

void operator()(int & element)
{
element += thevalue;
}

};

int main()
{
/*
vector<string> ve;

copy(istream_iterator<string>(cin),
istream_iterator<string>(),
back_inserter(ve));

sort(ve.begin(),ve.end());

copy(ve.begin(),ve.end(),
ostream_iterator<string>(cout,"\t"));
*/
vector<int> ve;
for(int i = 0; i< 9; i++)
{
ve.push_back(i);
}

for_each(ve.begin(),ve.end(),print);
cout << endl;

for_each(ve.begin(),ve.end(),myInt());
cout << endl;

cout << "after add --------" << endl;
for_each(ve.begin(),ve.end(),add<10>);

for_each(ve.begin(),ve.end(),print);
cout << endl;
for_each(ve.begin(),ve.end(),AddValue(10));
for_each(ve.begin(),ve.end(),print);
cout << endl;
for_each(ve.begin(),ve.end(),AddValue(*ve.begin()));
for_each(ve.begin(),ve.end(),print);
cout << endl;
}

for_each第三个参数传入的是函数名称
通过模板生成代码后的函数指针,for_each需要调用,可以看看STL的for_each函数的源码
===========================================
// 你的需求
void printName( const CStudent& _s )
{
std::cout<< _s.name << std::endl;
}
std::vector<CStudent> stu_list;
std::for_each( stu_list.begin(), stu_list.end(), printName );

for (vector::iterator iter = ss.begin; iter != end; iter++)
{
cout<<iter->name;
}

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;

class CStudent
{
public:
CStudent(string Name, int Id)
{
this->name = Name;
studentID = Id;
}

string name;
int studentID;
};

void print(CStudent&a)
{
cout << "姓名:" << a.name << endl;
cout << "学号:" << a.studentID << endl;
}

void test01()
{

CStudent p1("张三", 1);
CStudent p2("李四", 2);
CStudent p3("王五", 3);

vector<CStudent>ss;
ss.push_back(p1);
ss.push_back(p2);
ss.push_back(p3);

for_each(ss.begin(), ss.end(), print);

}

int main(void)
{
test01();

system("pause");
return 0;
}


昂昂溪区18444434104: C++ STL for - each 的用法? -
伏厘青鹏: for_each第三个参数传入的是函数名称,通过模板生成代码后的函数指针,for_each需要调用,可以看看STL的for_each函数的源码. #include <iostream> #include <string> #include <algorithm> #include <vector> #include <iterator> using ...

昂昂溪区18444434104: 为什么说for - each是非变动性算法(STL C++) -
伏厘青鹏: std::for_each()不是非变动性算法.非变动性算法是指不修改数据的算法,例如 元素计数 count count_if 最小值和最大值 min_element min_element 等 搜寻元素 find find_if search 等 区间的比较 equal 等 而for_each可以修改容器的值,因此不...

昂昂溪区18444434104: c++ Test中不认识for each 怎么解决阿 -
伏厘青鹏: STL中有for_each,不过针对的是容器的迭代器. 例子: #include "stdafx.h" #include#include#includeusing namespace std; void f(int p){ cout ivec(a,a+4); for_each(ivec.begin(),ivec.end(),f); return 0; } 其中,f可以是函数指针,也可以是函数对象(类中的operator()).

昂昂溪区18444434104: c++中有哪些标准库函数 -
伏厘青鹏: C++ STL 标准模板库 C++容器类vector . 向量容器deque 双端队列容器list 双向链表容器slist 单向链表容器bit_vector 位向量容器set 集合容器multiset 多重集合容器map 映照容器multimap 多重映照容器hash_set 哈希集合容器hash_map 哈希映照容...

昂昂溪区18444434104: C语言或者C++里有for each么 -
伏厘青鹏: 没有.不过c++有迭代器,可以看做foreach的一种前身形式. 另外有一些扩展,例如QT的C++库,有用宏实现的foreach

昂昂溪区18444434104: C++的基础语法已会,stl的基本用法已熟,该如何深入学习? -
伏厘青鹏: 嗯 只能说你熟悉了 就好比你熟悉象棋的规则 但是要对弈起来 还要一段距离 先多多练点小程序吧 去高校OJ刷题 几百题后(新手的话就一两个月左右) 就可以自己看看游戏开发的书了 至于看什么书 到书店里面选就好了 个人觉得这样比较好

昂昂溪区18444434104: STL中的算法是对所有容器都适用吗 -
伏厘青鹏: c++ stl 标准模板库 c++容器类vector . 向量容器deque 双端队列容器list 双向链表容器slist 单向链表容器bit_vector 位向量容器set 集合容器multiset 多重集合容器map 映照容器multimap 多重映照容器hash_set 哈希集合容器hash_map 哈希映照容器...

昂昂溪区18444434104: 标准函数 名词解释 -
伏厘青鹏: 标准函数 C++标准函数 C++标准函数库为C++程序员们提供了一个可扩展的基础性框架.我们从中可以获得极大的便利,同时也可以通过继承现有类,自己编制符合接口规范的容器、算法、迭代子等方式对之进行扩展.它大致包含了如下几个组...

昂昂溪区18444434104: 用程序判断当前的程序是c++程序还是c程序 -
伏厘青鹏: 其实这两个编译判断当前所使用的编译器是C++编译器还是C编译器,与你的程序是c++还是C无关.__cplusplus__和__STDC__两个常量,是由编译器为你定义的,开发者不直接控制.那么VC默认是按照C++编译器进行编译,要按照标准C语...

昂昂溪区18444434104: C++程序设计 模板与STL -
伏厘青鹏: 我写个吧 template T Small(T t1,T t2){ return t1}//话说不用模板 const char *Small(const char *pa,const char *pb){ return strcmp(pa,pb)} const int SIZE = 100; templateclass Stack { public: Stack(); ~Stack(); void Push(T n); T Pop(); private: T stack[SIZE]; int tos; };

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网