`
lunan
  • 浏览: 77968 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

copy_if

    博客分类:
  • STL
 
阅读更多
#include "stdafx.h"
#include <string>
#include <iostream>
#include "boost/assign.hpp"
#include "boost/bind.hpp"
#include "boost/typeof/typeof.hpp"
#include "boost/assert.hpp"
#include <boost/foreach.hpp>

#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
#define foreach BOOST_FOREACH
#define auto_t  BOOST_AUTO
#define assert_t BOOST_ASSERT

using namespace boost::assign;
using namespace std;

#define BOOST_DISABLE_ASSERTS

//copy_if
template<typename InputIterator, 
typename OutputIterator,  
typename Predicate>
OutputIterator copy_if(InputIterator begin,
   InputIterator end,
   OutputIterator destBegin,
   Predicate p)
{
while (begin != end)
{
if (p(*begin)) *destBegin++ = *begin;
++begin;
}
return destBegin;
}

//自定义类型
struct device
{  
device( long LL,string SS,double DD)
:m_id     (LL)
,m_name   (SS)
,m_double (DD)
{}

device()
:m_id     (0)
,m_name   (0)
,m_double (0)
{}

long   m_id;
string m_name;
double m_double;
};



int main(int argc, _TCHAR* argv[])

std::vector<device> dd;
dd.push_back(device(1,"1",1.1));
dd.push_back(device(2,"2",2.1));
dd.push_back(device(3,"3",3.1));
dd.push_back(device(4,"4",4.1));

std::vector<device> cc;

copy_if(dd.begin(),
    dd.end(),
back_inserter(cc),
bind(&device::m_id,_1) == 2 ||
bind(&device::m_name,_1) == "4");

return 0;
}
分享到:
评论

相关推荐

    基于ARM 构架的copy_from_user与copy_to_user详细分析.doc

    基于 ARM 构架的 copy_from_user 与 copy_to_user 详细分析 在学习 Linux 内核驱动程序时,大家都遇到过 copy_from_user 和 copy_to_user 这两个函数。这两个函数在内核中使用非常频繁,负责将数据从用户空间拷贝到...

    csum_partial_copy_generic.rar_return

    描述中的 "return if we had a whole number of words" 提示我们在函数执行过程中,如果能够完全以整数个“字”(通常指32位或64位的数据单元)来处理数据,那么函数就会直接返回。这种优化可能是为了提高效率,避免...

    object-copy_Objectcopy_

    在JavaScript中,`Object.copy`通常指的是对象复制的方法。虽然JavaScript原生并没有提供`Object.copy`这样的函数,但我们可以利用其他方法实现对象的深拷贝或浅拷贝。本篇文章将详细探讨对象复制的原理、深拷贝与浅...

    STL算法

    STL提供了四个删除算法:`remove`、`remove_if`、`remove_copy`和`remove_copy_if`。`remove`算法从区间`[first, last)`中删除元素`val`,返回新区间中的最后一个元素后的位置。`remove_if`算法从区间`[first, last)...

    CSTL参考文档,C下的STL

    - **algo_partial_sort** / **algo_partial_sort_if** / **algo_partial_sort_copy** / **algo_partial_sort_copy_if**:部分排序。 - **algo_nth_element** / **algo_nth_element_if**:将特定元素放置在正确的位置...

    STL实现简单的比赛程序

    我们可以使用`std::vector&lt;int&gt;`作为容器存储数据,然后用`std::remove_if`或`std::copy_if`这样的算法配合自定义的函数对象来实现筛选。 ```cpp #include #include // 自定义函数对象,判断元素是否大于10 ...

    boost库中对字符串的一些算法

    - `trim_left_copy_if()`:与`trim_left_if()`类似,但返回新字符串。 - `trim_right()`:移除字符串末尾的空白字符。 - `trim_right_if()`:移除字符串末尾满足指定谓词的字符。 - `trim_right_copy()`:与`...

    copy_test.rar_it

    它的基本结构包括函数定义、变量声明、控制结构(如if语句、for循环和while循环)、数据类型(如int、char、float等)以及运算符。 在编写C语言的复制操作测试代码时,可能涉及以下知识点: 1. 文件操作:C语言提供...

    c++容器使用经验总结

    第五,使用区间成员函数优于单元素成员函数,如`std::remove_if`和`std::copy_if`等,它们在表达意图和性能上更优。 第六,注意C++编译器解析规则,避免在形参声明中使用额外的括号。 第七,避免在容器中使用`auto...

    30-seconds-of-cpp:30秒的C ++(C ++中的STL)。 在此处阅读有关30C ++的更多信息:backhand_index_pointing_right:

    30秒的C ++ 30秒的C ++标准模板库 可以在30秒或更短时间内学会的C ++ STL功能(函数/库)的集合 头文件 :sparkles: ... find_if_not for_each for_each_n generate includes iota is_heap is

    copy_helper_帮助删除多余换行符和空格_

    text = '\n'.join([line.strip() for line in text.split('\n') if line.strip()]) return text ``` 这个函数首先通过`split()`函数将文本按空格拆分成单词,然后用`join()`函数重新组合,确保每个单词之间只有一...

    Test-Batch.zip_Test Batch file copy_batch

    1. **批处理语法**:批处理文件使用DOS命令行语法,如`copy`, `move`, `del`, `mkdir`等,以及条件语句(`if`)和循环语句(`for`)。 2. **变量使用**:批处理支持使用变量存储和传递数据,如`%var%`,这在处理动态...

    C++标准模板库算法.pdf

    - remove_copy、remove_copy_if:复制元素时排除满足条件的元素。 - unique、unique_copy:删除序列中相邻的重复元素。 STL算法中的旋转和置换函数: - rotate、rotate_copy:将序列中的元素进行旋转。 - swap、...

    STL算法一览(相关整理)

    10. replace_copy_if():复制序列时替换满足谓词的元素。 11. fill():用一给定值取代所有元素。 12. fill_n():用一给定值取代前 n 个元素。 13. generate():用一操作的结果取代所有元素。 14. generate_n():用一...

    CPP.rar_cpp删除空格

    std::copy_if(str.begin(), str.end(), std::back_inserter(noSpaceStr), [](char c){ return c != ' '; }); ``` 这些方法各有优缺点,如性能、可读性和适用场景等。在实际编程中,应根据项目需求选择最适合的...

    05_算法1

    - `remove_copy_if`:与`remove_if`类似,但用于复制过程。 - `unique`:删除连续重复的元素,仅保留第一个。 - `unique_copy`:与`unique`类似,但复制到新容器,只保留第一个不重复的元素。 这些算法的时间复杂度...

    c++STL学习——各种变异算法技术总结和用法代码实例(1)

    4. **复制算法(`std::copy`、`std::copy_if`)**:`std::copy`将源容器中的元素复制到目标容器,`std::copy_if`则仅复制满足特定条件的元素。这两个函数通常与迭代器一起使用,可以在不同容器之间进行数据迁移。 5...

    C++ STL 开发技术导引(第6章)

    22.10 条件替换和复制replace_copy_if 313 22.11 填充fill 314 22.12 n次填充fill_n 315 22.13 随机生成元素generate 316 22.14 随机生成n个元素generate_n 317 22.15 移除复制remove_copy 318 22.16 ...

    C++ STL开发技术导引(第5章)

    22.10 条件替换和复制replace_copy_if 313 22.11 填充fill 314 22.12 n次填充fill_n 315 22.13 随机生成元素generate 316 22.14 随机生成n个元素generate_n 317 22.15 移除复制remove_copy 318 22.16 ...

    WM_COPYDATA message use

    《WM_COPYDATA消息详解及其应用》 在Windows操作系统中,WM_COPYDATA消息是一个非常重要的功能,它允许应用程序间传递数据,无需通过临时文件或者剪贴板。这种消息机制为开发者提供了方便,使得进程间的通信(IPC,...

Global site tag (gtag.js) - Google Analytics