C++ 泛函数

一名CV界的小学生 2017-11-12 07:59:45
#include<string>
#include<vector>
#include<functional>
#include<algorithm>
using namespace std;


template<typename inputiterator,typename outputiterator,typename elemtype,typename comp>
outputiterator
filter(inputiterator first, inputiterator last, outputiterator at, const elemtype &val, comp pred)
{
while ((first = find_if(first, last, bind2nd(pred, val))) != last)
{
cout << "found value:" << *first << endl;
*at++ = *first++;
}
return at;
}
int main()
{
const int asize = 10;
int ia[asize] = { 23, 56, 14, 21, 15, 16, 17, 18, 19, 54 };
vector<int>vec(ia, ia + asize);
vector<int>ivec;

int ia2[asize];

cout << "filtering integer array for lessthan 20:" << endl;
filter(ia, ia+asize,ia2,20, greater<int>());

cout << "filtering iteger vector for lessthan 20:" << endl;
filter(vec.begin(), vec.end(), ivec.begin(), 20, greater<int>());

return 0;
}

运行时总是出现

这个提示,是为什么啊 ,百度了一下这个问题,但也没有确实的回答,这里发个帖子给聊聊这个问题啊
...全文
270 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2017-11-12
  • 打赏
  • 举报
回复
ivec中初始就没有为元素分配空间你就*at去赋值
  • 打赏
  • 举报
回复
这个问题已解决
C++标准函数库中80%是STL,其中广使用了性编程思想,在其中分为几大部分。 1:语言支持部分。 2:诊断部分。包含了异常处理,断言,错误代码三大方式。 3:通用工具部分。包括动态内存管理工具,日期/时间处理工具等。 4:字符串处理部分。 5:国际化部分。使用Locale和facet可以为程序提供多国际化支持,包括各种字符集,日期时间,数值货币处理的支持。 6:容器(containers)部分。STL重要部分,包含了许多数据结构,有vector(动态增加的数组),queue(队列),stack(堆栈)……甚至也包括string,它也可以看做为一种容器,并且适用所有的容器可用的方法。 7:算法(algorithms)部分。STL重要部分,包含了70多个通用算法,都是优化的效率很高的,用来控制各种容器,内建数组等。例如find可以用来在容器中查找某特定值的元素,for_each可以用来将函数应用到容器元素之上,sort用于对容器中的元素排序。 8;迭代器(iterators)STL重要组成部分,每个容器都有自己的迭代器,只有容器才可以进行访问自己的元素,它类似指针,将算法和容器中的元素联系起来。 9:数值(numerics)部分。包含了一些数学运算的功能库,对复数运算提供了支持。 10:输入输出(I/O)部分。摸版化的IOStream部分。他提供了对C++程序的支持,并且对原有的iostream兼容。 所以,总体看来,C++标准函数库,包含的10大块内容中,STL主要包含了四个部分,迭代器,容器,算法。和额外的一个字符串。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧