STL vector使用bind2nd函数查找和删除元素
来源:互联网 发布:手机时间不与网络同步 编辑:程序博客网 时间:2024/05/22 12:46
在小需求代码review中看到有对vector对象调用find_if函数,并通过bind2nd来帮顶一个自定义的一个比较器,用于在vector中查找符合特定条件的元素同过find_if返回元素的迭代器。于是上网找了一下关于find_if和bind2nd的用法,学习一下。
bind2nd和bind1nd
bind2nd和bind1nd是用于将二元运算转换为一元运算子,二者不同在于将要比较的值最为第一个参数传递还是第二个参数传递,详细的用法参见:http://blog.csdn.net/simahao/article/details/405455
使用find_if和bind2nd按条件查找vector元素
/************************************************************************* > File Name: vector_demo.cpp > Author: sam.liux > Mail: sam.liux@taobao.com > Created Time: 2012骞湀11鏃熸湡鍥鏃垎54绉************************************************************************/#include<iostream>#include<vector>#include<string>#include<algorithm>#include<functional>using namespace std;struct compare: std::binary_function<string, char *, bool>{ bool operator() (string & a, char* b) const { if (!a.compare(b)) return true; else return false; }};void print_arr(vector<string> &vec){ vector<string>::iterator itr = vec.begin(); for (; itr!=vec.end(); itr++) { std::cout << *itr << std::endl; }}int main(){ string arr[]={"aa", "bb", "cc", "dd"}; vector<string> vec(arr, arr+4); print_arr(vec); std::vector<string>::iterator pos = std::find_if(vec.begin(), vec.end(), std::bind2nd(compare(), "bb")); std::cout << "found: " << *pos << std::endl; std::cout << "erase element: " << "aa" << std::endl; vec.erase(std::remove_if(vec.begin(), vec.end(), std::bind2nd(compare(), "aa"))); print_arr(vec); //std::cout << "the end is: " << *p << std::endl; std::cout << "erase element: " << "bb" << std::endl; vec.erase(std::remove_if(vec.begin(), vec.end(), std::bind2nd(compare(), "bb"))); print_arr(vec); //std::cout << "the end is: " << *pp << std::endl; return 0;}
configue.in:
# -*- Autoconf -*-# Process this file with autoconf to produce a configure script.AC_PREREQ(2.59)AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)AC_CONFIG_SRCDIR([bind2nd.cpp])#AC_CONFIG_HEADER([config.h])AM_INIT_AUTOMAKE# Checks for programs.AC_PROG_CXX# Checks for libraries.# Checks for header files.# Checks for typedefs, structures, and compiler characteristics.# Checks for library functions.AC_OUTPUT([Makefile])
Makefile.am:
AUTOMAKE_OPTIONS=foreignbin_PROGRAMS=bind2ndbind2nd_SOURCES=bind2nd.cpp
- STL vector使用bind2nd函数查找和删除元素
- vector删除元素和查找
- STL vector 删除元素
- std::vector删除重复元素和查找
- std::vector删除重复元素和查找
- std::vector删除重复元素和查找
- STL vector中的元素删除
- C++:STL:vector删除元素
- STL vector中的元素删除
- STL vector中的元素删除
- STL中vector和map的查找和删除
- C++使用STL::vector删除数组内的重复元素
- 【STL】函数 for_each; bind1st和bind2nd,not1; mem_fun和mem_fun_ref;
- STL—vector删除重复元素
- 13.c++-stl::vector删除重复元素
- STL—vector删除重复元素
- C++ stl list、map、vector删除元素
- stl的vector,map,list删除元素
- Nginx搭建视频点播服务器(仿真专业流媒体软件)
- uva10104
- struts2开发
- 从无符号数x中查找第一个'1'的位置的C 代码。注意效率
- freetype相关链接
- STL vector使用bind2nd函数查找和删除元素
- 想你,但不爱你
- gcc编译C++程序
- 数据表中的连接
- Drupal7学习笔记之Theme
- FreeType的使用
- Socket编程指南及示例程序
- 空类,虚函数类,虚继承类的空间大小
- 唠唠叨叨又七夕