熟悉vs开发环境及stl,boost库 boost是什么意思思

STL/Boost學習 - 随笔分类 - 李sir - 博客园
随笔分类 - STL/Boost學習
摘要: 今天用asio写一个简单的server时,当连接成功时做如下工作Code highlighting produced by Actipro CodeHighlighter (freeware)/--&1asio::async_read(socket_,asio::buffer(&m_packet,sizeof(m_packet)),2boost::bind(&tcp_connection::HandleReadCardKey,shared_from_this(),3asio::placeholders::erro
摘要: shared_from_this()是enable_shared_from_this&T&的成员 函数,返回shared_ptr&T&。首先需要注意的是,这个函数仅在shared_ptr&T&的构造函数被调用之后才能使 用。原因是enable_shared_from_this::weak_ptr并不在构造函数中设置,而是在shared_ptr&T&的 构造函数中设置。 如下代码是错误的:class D:public boost::enable_shared_from_this&D&{public: D() { boost::share
摘要: 首先#include &gtest/gtest.h&,当然工程的头文件路径要设置正确1.简单测试TESTCpp代码#include &gtest/gtest.h& int Factorial( int n ) { if(n==2) return 100; //故意出个错,嘻嘻 return n&=0? 1 : n*Factorial(n - 1); } //用TEST做简单测试 TEST(TestFactorial, ZeroInput) //第一个参数是测试用例名,第二个参数是测试名:随后的测试结果将以&测试用例名.测试名&的形式给出 { E
摘要: bind并不是一个单独的类或函数,而是非常庞大的家族,依据绑定的参数个数和要绑定的调用对象类型,总共有十个不同的形式,但它们的名字都叫bind. bind接受的第一个参数必须是一个可调用对象f,包括函数,函数指针,函数对象和成员函数,之后bind接受最多9个参数,参数的数量必须与f的参数数量相等 _1,_2这些一直可以到9,是占位符,必须在绑定表达式中提供函数要求的所有参数,无论是真实参数还是占位符均可以。占位符不可以超过函数参数数量。 绑定普通函数: C++代码 #include&boost/bind.hpp& #include&iostream& usingname
摘要: 以boost::function和boost:bind取代虚函数boost::function和boost::bind已经纳入了std::tr1,这或许是C++0x最值得期待的功能,它将彻底改变C++库的设计方式,以及应用程序的编写方式。Scott Meyers的Effective C++ 3rd ed.第35条款提到了以boost::function和boost:bind取代虚函数的做法,这里谈谈我自己使用的感受。基本用途boost::function就像C#里的delegate,可以指向任何函数,包括成员函数。当用bind把某个成员函数绑到某个对象上时,我们得到了一个closure(闭包)
摘要: 当我们使用函数时习惯于C函数的格式,即如下形式resulttype funname( arglist );返回值类型 函数名( 参数列表 );在Boost.Function中,我们可以方便的定义定义函数对象。不过在定义用来表示类成员函数的函数对象时第一个参数是类指针。而且在调用时,要传入一个类实例的指针。这样用起来并不是很方便,因为调用者要知道类实例。这实际上没有实现解耦。而解耦是我们使用回调或委托设计的一个目标。为了解决这个问题,我们要使用Boost.Bind库Boost.Bind是一个函数对象工厂。他用来产生我们需要的函数对象。好了,有了它,你可以在你设计中大量使用Boost.Functi
摘要: #include&ctime&#include&iostream&#include&boost/bind.hpp&#include&boost/shared_ptr.hpp&#include&boost/enable_shared_from_this.hpp&#include&boost/asio.hpp&usingboost::asio::ip::std::stringmake_daytime_string(){time_tnow=time(0);returnctime(&am
摘要: #include&ctime&#include&iostream&#include&string&#include&boost/asio.hpp&usingboost::asio::ip::std::stringmake_daytime_string(){time_tnow=time(0);returnctime(&now);}int_tmain(intargc,_TCHAR*argv[]){try{boost::asio::io_serviceio_//新建一个asio::ip
摘要: #include&iostream&#include&boost/array.hpp&#include&boost/asio.hpp&//本程序的目的是访问一个时间同步服务器,我们需要用户指定一个服务器(如time-a.nist.gov),用IP亦可.usingboost::asio::ip::intmain(intargc,char*argv[])...{try...{if(argc!=2)...{std::cerr&&&Usage:client&host&&&&std::retur
摘要: http://www.boost.org/doc/libs/1_35_0/doc/html/boost_asio/using.html原文/firectrl/archive//47638.html翻译
摘要: 一般而言我们创建用于接收error的类型大多声明如下: boost::system::error_code error 我们用这个类型去接受在函数中产生的错误如socket.connect( endpoint, error);如果连接失败,错误类型会保存到error中,比如连接主机失败可能会返回这样的错误boost::asio::error::host_not_通过if (error)检测到error后,抛出异常throw boost::system::system_error(error);需要注意的是,我们的error被 转化成 system_error了显示错误很简单了,st
摘要: char d1[128];size_t bytes_transferred = sock.receive(boost::asio::buffer(d1));buffer 大小是自动管理的同样std::vector&char& d2(128);bytes_transferred = sock.receive(boost::asio::buffer(d2));还可以基于boost::arrayboost::array&char, 128& d3;bytes_transferred = sock.receive(boost::asio::buffer(d3)); buffe
摘要: 大家都希望可以像操作STL容器一样的去操作数组,C++可没有提供这个东西,有时候你会选择使用vector来替代,不过这毕竟不是个好的办法,毕竟vector模拟动态数组比较稳妥,而用它去替代一个普通的数组,开销毕竟太大了。而恰好,boost::array就为你提供了这个功能。boost::array的定义如下(简化):详情参见相关文件Code highlighting produced by Actipro CodeHighlighter (freeware)/--&template&class T, std::size_t
摘要: 使用情景:当类对象被 shared_ptr 管理时,需要在类自己定义的函数里把当前类对象作为参数传给其他函数时,这时需要传递一个 shared_ptr ,否则就不能保持 shared_ptr 管理这个类对象的语义(因为有一个 raw pointer 指向这个类对象,而 shared_ptr 对类对象的这个引用没有计数,很有可能 shared_ptr 已经把类对象资源释放了,而那个调用函数还在使用类对象——显然,这肯定会产生错误)。很好奇这个模板类的实现。先看看怎么使用:对一个类 A ,当我们希望使用 shared_ptr 来管理其类对象时,而且需要在自己定义的函数里把类对象 shared_pt
摘要: boost::format类提供了类似C语言里'printf'功能的格式化输出能力,当然功能更强大。所需头文件:#include &boost/format.hpp&示例代码:#include&iostream& #include&string& #include&boost/format.hpp& int_tmain(intargc,_TCHAR*argv[]) { //使用%序号%的方式给出指示符,后面用%连接对应的数据。 cout&&boost::format(&w
摘要: 转自:http://blog.csdn.net/Solstice/archive//3066268.aspx这是一篇比较情绪化的blog,中心思想是“继承就像一条贼船,上去就下不来了”,而借助boost::function和boost::bind,大多数情况下,你都不用上贼船。boost::function和boost::bind已经纳入了std::tr1,这或许是C++0x最值得期待的功能,它将彻底改变C++库的设计方式,以及应用程序的编写方式。Scott Meyers的Effective C++ 3rd ed.第35条款提到了以boost::function和boost
摘要: 智慧 + 毅力 = 无所不能正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...boost::asio 的同、异步方式 转自:http://blog.csdn.net/zhuky/archive//5364574.aspxBoost.Asio是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。头文件#include &boost/asio.hpp&名空间using namespace boost::ASIO库能够使用TCP、UDP、ICMP、串口来发送/接收数据,下面先介绍TCP协议的读写
摘要: 以前使用ACE实现Server框架,但是觉得太笨重,决定采用boost.asio来写服务器程序: 1.服务器构建在linux上面;当然也可以在windows下运行 2.io部分采用非阻塞模式、业务逻辑部分采用同步线程池实现 3.封装io操作及状态,用户应用程序无需关心io详细操作所以决定采用boost::asio框架来写服务器:boost::asio::io_service提供了核心IO功能、和异步IO对象,它包括: boost::asio::ip::tcp::socket boost::asio::ip::tcp::acceptor boost::asio::ip::udp::socket
摘要: boost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shared_ptr是可以共享所有权的智能指针,首先让我们通过一个例子看看它的基本用法: #include &string&#include &iostream&#include &boost/shared_ptr.hpp&class implementation{public:~implementation() { std::cout &&&destroying
摘要: 1. 序言现在学的东西很容易忘记,写这篇文章的目的是能让我在需要时快速找回当时的感觉. Let's BOOST THE WORLD . 2. 编译:VC2005注意在 属性-&C/C++-&预处理器-&预处理定义 中加入 _CRT_SECURE_NO_DEPRECATE;来屏蔽不必要的警告 3. Asio 网络库Boost.Asio是利用当代C++的先进方法,跨平台,异步I/O模型的C++网络库. 3.1. 网络库:VC2005注意在 属性-&C/C++-&命令行 中加入 -DBOOST_REGEX_NO_LIB来防止自动连接. 3.2. 同步Timer本
摘要: 1,字符串 到 数值类型的转换 2,数值 到 字符串的转换 3,异常处理情况 4,boost::lexical_cast 的原型: template&typename Target, typename Source& Target lexical_cast(Source arg); lexical_cast 是依赖于字符串流 std::stringstream 的,其原理也是相当的简单:把源类型 (Source) 读入到字符流中,再写到目标类型 (Target) 中。但这里同时也带来了一些限制: - 输入数据 (arg) 必须能够 “完整” 地转换,否则就会抛出 bad_lexic
摘要: 2. 同步Timer本章介绍asio如何在定时器上进行阻塞等待(blocking wait). 实现,我们包含必要的头文件. 所有的asio类可以简单的通过include &asio.hpp&来调用.#include &iostream& #include &boost/asio.hpp& 此外,这个示例用到了timer,我们还要包含Boost.Date_Time的头文件来控制时间.#include &boost/date_time/posix_time/posix_time.hpp& 使用asio至少需要一个boost::asio::i
摘要: boost, asio, SPServer boost::asio是一个高性能的网络开发库,Windows下使用IOCP,Linux下使用epoll。与ACE不同的是,它并没有提供一个网络框架,而是采取组件的方式来提供应用接口。但是对于常见的情况,采用一个好用的框架还是能够简化开发过程,特别是asio的各个异步接口的用法都相当类似。 受到 SP Server 框架的影响,我使用asio大致实现了一个多线程的半异步半同步服务器框架,以下是利用它来实现一个Echo服务器:1. 实现回调: static void onSessionStarted(RequestPtr const& requ
摘要: 我稍稍整理了下,就是加了点注释,很基本的东西,大家可以参考socket的几个流程,我上面也有提示的,希望对大家有所帮助。最后,如果大家有什么好的方法希望能让我也分享下,谢谢!服务端:#include &boost/asio.hpp&#include &boost/bind.hpp&#include &boost/shared_ptr.hpp&#include &boost/enable_shared_from_this.hpp&#include &iostream&using boost::asio::ip::#define
摘要: boost库中的网络编程的例子比较复杂,不太好理解,所以,从网上找了一个简单点的例子。网址如下:http://blog.chinaunix.net/u3/93184/showart_1846119.html.经过修改,可以运行。服务器代码:Servier.cpp#include &boost/asio.hpp&#include &boost/bind.hpp&#include &boost/shared_ptr.hpp&#include &boost/enable_shared_from_this.hpp&#include &iostrea
摘要: 1.boost::any boost::any是一种通用的数据类型,可以将各种类型包装后统一放入容器内最重要的它是类型安全的。有点象COM里面的variant.使用方法:any::type() 返回包装的类型any_cast可用于any到其他类型的转化 #include & boost / any.hpp & void test_any() {typedefstd::vector & boost::any &a.push_back( 2 );a.push_back( string ( & test & )); for (uns
摘要: stl string 使用1. 查找字符std::wstring strData = L"&result&[北京市, 上海市, 深圳市]&/result&"void DoF(const std::wstring &strData, std::list&std::wstring&& listDo){ std::wstring strTarB = L"&result&["; std::wstring strTarE = L"]&/result&"; std::wstring::size_type nBeginTempB = 0, nEndTempB = 0, nBeginTempE = 0, nE
摘要: 在浅尝boost之timer的post里,我提到boost::timer在linux和windows下的不同表现,并用ACE_OS::gettimeofday做了一个替代方案。不过,为了这个功能把ACE的DLL绑到一起,感觉不是那么愉快。 下面是另一个方案,利用boost::date_time库来解决#include&boost/date_time/posix_time/posix_time.hpp&classElapsedTime{public:ElapsedTime():start_time_(boost::posix_time::microsec_clock::local_time())
摘要: 我一直是在努力推介boost,因为boost是一块美玉,但,没有什么是完美的。现在,我将暴露出boost的一点瑕疵:boost::timer。虽说是瑕不掩瑜,但瑕疵就是瑕疵。先看一看下面的例子: //win2000中vc7.1编译运行 boost:: Sleep(1000); cout&&t.elapsed()&&
//redhat9中gcc3.2.3编译运行 boost:: sleep(1); cout&&t.elapsed()&& 他们的结果是一样吗?不同的操作系统,时钟精度是不一样,结果自然不完全一样;但我说的不一样不是这一点小小的差异,
摘要: Table11.5.Erase/Replace Algorithm nameDescriptionFunctionsreplace/erase_firstReplace/Erase the first occurrence of a string in the inputreplace_first() replace_first_copy() ireplace_first() ireplace_first_copy() erase_first() erase_first_copy() ierase_first() ierase_first_copy() replace/erase_lastRe
摘要: Table11.4.Find algorithms Algorithm nameDescriptionFunctionsfind_firstFind the first occurrence of a string in the inputfind_first() ifind_first() find_lastFind the last occurrence of a string in the inputfind_last() ifind_last() find_nthFind the nth (zero-indexed) occurrence of a string in the inpu
摘要: Table11.3.PredicatesAlgorithm nameDescriptionFunctionsstarts_withCheck if a string is a prefix of the other onestarts_with()istarts_with() ends_withCheck if a string is a suffix of the other oneends_with()iends_with() containsCheck if a string is contained of the other onecontains()icontains() equal
摘要: Boost String Algorithms Library 是很有用的一个库,它让C++程序员不用一次又一次的为了字符串的处理制造一些小小的轮子。这里我将逐一用实例详细的说明每一个函数的使用,希望给自己给同道带来方便。 Boost String Algorithms Library 是很有用的一个库,它让C++程序员不用一次又一次的为了字符串的处理制造一些小小的轮子。《浅尝boost之String algorithms library》里我主要介绍了它的Split ,因为这个功能很出彩,其它则一带而过。不过,当多次向朋友推荐这个库后,反馈得到的信息让我觉得详细列出其每一个函数的使用,作为一
摘要: 很多时候我都想在自已的代码中全部使用std::string代替MS的CString来保证我的程序在未来易于移植,但老实说CString比std::string好用很多,每每还是被诱惑了;再看看C#的string,用起来感觉更好。不过有了这个库 我可以基本抵制住诱惑了... #include&boost/algorithm/string.hpp& 很多时候我都想在自已的代码中全部使用std::string代替MS的CString来保证我的程序在未来易于移植,但老实说CString比std::string好用很多,每每还是被诱惑了;再看看C#的string,用起来感觉更好。不过有了这个库我可以基本
摘要: 虽然网上讨论不少Boost正则表达式的问题,推荐用其他正则库,但是还是用了下。[code]#include &list&#include &boost/lexical_cast.hpp&#include &boost/regex.hpp& //使用正则表达式 #include &iostream&//#include "../PStringConv/PStringConv.h"#include &string&uregex expression("[垃圾文字]{8}"); //模式int main(int arg
摘要: 一:编译boost的正则表达式需要编译(如果不需要全部Boost的功能的话,请不要build all boost,那会花掉好几个小时。我推荐仅仅build需要的库就好。)原有的boost 1.33似乎使用vc8编译的时候有问题。下载boost 1.34.1,使用“Visual Studio 2005 Command Prompt”,进入到boost_1_34_1\libs\regex\build:nmake vc8.makOK,生成的文件在vc80下。二:学习正则表达式deelx_zh.rar不错的正则表达式的学习资料,顺便推荐一下:/ 这个站长还
摘要: boost::algorithm学习#include &boost/algorithm/string.hpp&u 一:大小写转换1 to_upper() 将字符串转为大写Example:string str1(" hello world! ");to_upper(str1); // str1 == " HELLO WORLD! "2 to_upper_copy() 将字符串转为大写,并且赋值给另一个字符串Example:string str1(" hello world! ");string str2;str2
摘要: 一 Boost::bind
在STL中,我们经常需要使用bind1st,bind2st函数绑定器和fun_ptr,mem_fun等函数适配器,这些函数绑定器和函数适配器使用起来比较麻烦,需要根据是全局函数还是类的成员函数,是一个参数还是多个参数等做出不同的选择,而且有些情况使用STL提供的不能满足要求,所以如果可以我们最好使用boost提供的bind,它提供了统一的接口,提供了更多的支持,比如说它增加了shared_ptr,虚函数,类成员的绑定。 二 源码剖析1) bind1st,bind2st函数绑定器,把二元函数对象变为一元函数对象。2) mem_fun,把成员函数变为函数对象。3) f
摘要: 一 Boost::array
在以前,如果我们要处理一组数据,我们可能使用一般数组存储,或者需要许多的对数组的数据的操作的时候,我们使用STL容器存储。但是如果我们的需求是,我们能够提前固定一组数据的大小,或提前知道这组数据的大小,但是我们又想这组数据进行一些操作,比如排序。。。显然对这个情况,上面的使用原始数组或STL容器都有点不太合适,因为原始的数组显得笨重,的我们自己实现一些重复的功能,但是如果是使用STL容器的话,有可能会导致空间和性能的下降。
基于上面的情况,所以在Boost中引入Boost::array,也可能会被加入下一代的C++标准中。Boost::array,内部仍然是固
摘要: 一 Boost::smart_Ptr
我们学习C++都知道智能指针,例如STL中的std::auto_ptr,但是为什么要使用智能指针,使用它能带给我们什么好处呢?最简单的使用智能指针可以不会因为忘记delete指针而造成内存泄露。还有如果我们开发或者使用第三方的lib中的某些函数需要返回指针,这样的返回的指针被client使用的时候,lib就会失去对返回的指针的控制,这样delete的指针的任务一般就会交给调用方client,但是如果client忘记调用delete或是调用的时机不正确,都有可能导致问题,在这种情况下就最好使用智能指针。还有使用智能指针可以保证异常安全,保证程序在有异常抛出
摘要: Boost::tuple就为我们提供了一种类似于匿名struct的方法为我们解决函数的多个返回值的问题。既增强了代码的可读性有不增加代码量。其实在STL中已经有这样的特例,std::pair其实就是boost::tuple的2个参数的特例 一 Boost::tuple
很多的时候我们经常需要为我们的函数返回多个值,一般的做法是通过传入非常量的指针或引用,但是这样的话可能可读性就要差一些,使用者可能需要确切的文档才能确定到底哪个是返回值,为了更好的可读性,我们可以使用class或struct来封装我们要返回的多个值,然后返回封装struct或class,但是使用这种方法的弊端就是增加的程序的代
摘要: 在boost中有boost::Any为我们提供了类似java或.net中的object类型,boost::Any能够代表任意类型,实现任意类型的类型安全存储以及安全的取回,常用在将不同类型的对象存储在标准容器中一 Boost::Any 很多时候我们想有一种可以代表任何类型的类型,比如像纯面向对象语言java或.net中的Object类型,但是对于C++本身并没有这样一个基类,所以我们如果要解决这类问题,首先我们考虑的是使用基类的指针,这能够解决以部分问题,但是更多的我们可以求助于void*,使用void*的缺点就是丢失了类型信息和缺乏类型安全。 幸好的是在boost中有boost::Any为我
摘要: Boost带领你远远地超越了C++标准库,它使得C++编程更优雅、更有活力、更高产。唯一的关于boost的book:Beyond the C++ Standard Library: An Introduction to Boost... 一 BOOSTBoost带领你远远地超越了C++标准库,它使得C++编程更优雅、更有活力、更高产。(引自:Beyond the C++ Standard Library: An Introduction to Boost)(慢慢体会哦!)二 参考主要:boost的在线document:http://boost.org/libs/libraries.htm唯一的
摘要: 输入输出的头文件 &iostream& string流的头文件 &sstream& 文件流的头文件 &fstream& stringstream的用法1.利用输入输出做数据转换2.支持char*的输入和输出3.来存储可变数据的列表
摘要: 一般的对于需要删除字符串开始和结尾的空格的代码,经常为Code highlighting produced by Actipro CodeHighlighter (freeware)/--&1#include&iostream&2#include&string&345voidmain()6{7stringstrTest="Hello,world.";89strTest.erase(0,strTest.find_first_not_of(''));10cout&&"["&&strTest&&"]"&&
摘要: Boost 中文站 Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,在C++社区中影响甚大,其成员已近2000人。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。本站主要介绍Boost相关的中文技术文档。 Boost 入门 C++ Boost 学习资源列表 boost库简介 Windows和Solaris上Boost安装和编译 走进Boost(Boost使用入门) Boost 编程技术 Boost中的智能指针 C++ Boost Thread线程编程指
摘要: 1.在http://www.boost.org/网站上下载文件包2.由于boost是采用其自己的bjam工具通过命令行进行编译的,前提就是要保证自己的“Visual Studio 2005 命令提示”工具可用。3.解压下载的文件包X:\XXX\boost_1_44_0\目录下4.编译bjam。打开vs2005的工具菜单进入命令提示窗口,cd到X:\XXX\boost_1_44_0\tools\jam\src下执行build.bat,会在X:\XXX\boost_1_44_0\tools\jam\src\bin.ntx86\下生成bjam.exe,將bjam.exe复制到X:\XXX\boost
摘要: 此范例demo如何使用STL的queue container,要将数据加进queue时,只要用q.push(item)即可,但要取出数据时,并不是用q.pop(),而是用q.front()取出最前面的数据,q.pop()则是将最前面的数据取出queue,其回传值为void。1/**//*2(C)OOMusou200634Filename:Queu...
摘要: sort()和stable_sort()都對container做sort的動作,但對於相等的值,sort()和stable_sort()處理的方式不一樣,stable_sort()會保證不更改原先的順序,但sort()則不保證,有可能更改順序,但也有可能不改,這樣講還是很籠統,若用SQL來解釋,就一目暸然了。在SQL中,我們常有以下寫法1SELECT*2FROM[customers]3ORDERB...
摘要: 此範例demo如何使用unique() algorithm。1/**//*2(C)OOMusou200634Filename:GenericAlgo_unique.cpp5Compiler:VisualC++8.0/ISOC++6Description:Demohowtouseunique()algorithm7Release:12/11/200...
摘要: copy() algorithm是很好用的algorithm,但偏偏就是沒有copy_if(),但透過remove_copy_if()則可達到相同的要求。remove_copy_if()的思考方式和copy_if()相反,若UnaryPredicate為true,則不copy,若為false,則copy。此範例demo若為remove_copy_if() algorithm,先輸出奇數,再輸出偶數...
摘要: 大家都體會過sequential container搭配copy() algorithm,只要一行程式就可以將所有值輸出到cout,map這種associative container就無法用這一招,是否有其它方式解決呢?map這種associative container因為是雙值,若用copy()到cout,會讓cout傻眼,不知道要抓拿一個值,當然用for loop一定可以,但基於使用STL...
摘要: map和multimap都自帶find(),不需Generic Algorithm就可搜尋,事實上,當container和algorithm都提供方法時,應先考慮使用container自帶的方法,因為algorithm考慮到泛型,還需要經過iterator,但container自帶的方法卻是量身訂做的,所以執行速度較快。要列出multimap中某個key的所有value,有三種方式,此範例demo...
摘要: 若要將vector中反過來列印,該怎麼做呢?STL提供了reverse_iterator。1/**//*2(C)OOMusou200634Filename:ReverseIterator.cpp5Compiler:VisualC++8.0/ISOC++6Description:Demohowtousereverse_iterator7Releas...
摘要: 很多STL algorithm都是_if結尾的,讓我們可以帶function進去,若配合function object,可讓function更有彈性!!以下的範例想利用count_if() algorithm得知vector大於n的有幾個?1/**//*2(C)OOMusou200734Filename:FunctionObjectSimple....
摘要: Abstract若想將container中的iterator,從一個值取代成另外一個值,但container並沒有提供replace()這個member function,而是提供了replace()這個Generic Algorithm。Introduction以下範例我們將vector中,所有的1取代成4。1/**//*2(C)OOMusou2006blogs...
摘要: Abstract之前在(原創) 如何使用for_each() algorithm? (C/C++) (STL)曾經討論過for_each(),不過當時功力尚淺,只談到了皮毛而已,這次看了effective STL的item 41、43後,對for_each()又有了更深入的了解,因此做了本篇心得報告。Motivation看到了eXile的C++中实现 foreach使用了巨集對foreach做改善...
摘要: Abstractfor_each()是STL中少數可以回傳值的algorithm,此範例在展示for_each()此特殊功能與function object可以留住state的特性。Introductionfunction object與global function的差別除了function object可以傳入參數外,還可以不使用static就可以留住state。一個簡單的需求,想要每印n個數...
摘要: 轉貼自 梦在天涯的STL算法学习STL算法学习,小结如下:前提: 下载stl源码: /tech/stl/download.html打开网页: /tech/stl/stl_index.html一 函数对象: 因为很多的算法中多使用了函数对象 二元函数对象,V1和V2为输入,V3为结果plus&T&: transfor...
摘要: Abstract STL並沒有提供這樣的algorithm,透過簡單的方法,就可以達成這個需求。Sample Code1/**//*2(C)OOMusou200734Filename:GenericAlgo_eliminate_duplicate.cpp5Compiler:VisualC++8.0/BCB6.0/gcc3.4.2/ISOC++6D...
摘要: Abstract前一篇(原創) 如何使用C語言的標準函式庫進行排序? (C)談到使用C語言stdlib.h的qsort()對array進行排序,C++呢?STL也提供了sort() algorithm。IntroductionSTL的sort()不僅僅支援array,還支援其餘的container如vector,list等,這也是泛型之美,container和algorithm徹底decouple...
摘要: Abstract寫文字檔轉檔程式是很常見的需求,一般來說,這種都屬於dirty job,沒什麼技巧,純粹是迴圈硬幹,若使用STL來寫轉檔程式,不只程式超短,一個迴圈都不需要!!Introduction昨天網友Momo要我幫他寫一個轉檔程式,將文字檔轉成XML檔,格式如下文字檔user_b5fix.dat-1,-1,-1,-1,-1,-1一元運算符,一元運算子二叉樹,二元樹二元運算符,二元運算子二分...
摘要: Abstract若用C語言配合迴圈,這是個很簡單的題目,但若用C++配合STL,則有很漂亮的寫法。Introduction陣列中有2、3、1、3、5五個值,希望能列出大於2的所有元素。C++1/*2(C) OOMusou 2008 34Filename : GenericAlgo_remove_copy_if_predicate.cpp5Comp...
摘要: Abstract在(原創) 如何将字符串前后的空白去除? (使用string.find_first_not_of, string.find_last_not_of) (C/C++) (STL) 中已经可顺利将字符串前后的空白去除,且程序相当的精简,在此用另外一种方式达到此要求,且可同时将whitespace去除,并且使用template写法。Introduction原來版本的程式在VC8可執行,但...
摘要: Abstract若需要將程式碼放進word交報告或做文件時,或許我們會想將程式碼加上行號方便講解,如同博客園顯示程式碼那樣,我們該如何做呢?Introduction使用環境:Visual C++ 9.0 / Visual Studio 2008一段C++的小程式,可以幫程式碼加上行號後輸出。map_code_line.cpp / C++[代码]執行結果[代码]32行[代码]是整個程式的關鍵:使用m...
摘要: Abstract一個很常見的需求:『將struct塞進vector』,在C++該怎麼做呢?Introduction使用環境:Visual C++ 9.0 / Visual Studio 2008由於vector只允許一個欄位,所以才會想將struct塞進vector,以彌補vector的不足。struct_in_vector.cpp / C++[代码]執行結果[代码]由於vector內放的是str...
摘要: Abstract回文是學習C語言時,常出現的作業與考題。Introduction所謂回文,就事字串的第一個字元等於最後一個字元,第二個字元等於倒數第二個字元。palindrome.c / C[代码]18行[代码]依序檢查字串第一個字元是否等於最後一個字元,第二個字元是否等於倒數第二個字元,若發現任何一個字元不同,就不是回文。感謝沐枫的提醒,在C++有更精簡的寫法。palindrome.cpp / ...
摘要: warning C4018: &&&: 有符号/无符号不匹配出错代码
for(int j=0;j&detector.size();j++)出错原因分析: detector 是一个Vector容器 ,detecot.size() 在容器说明中 被定义为: unsigned int 类型, 而j是int 类型 所以会出现: 有符号/无符号不匹配 警告 错误改正 :...
摘要: #include "stdafx.h"#include &string&#include &vector&#include &algorithm&#include &iostream&int main(int argc, char* argv[]){vector&int&vector&l...

我要回帖

更多关于 stl是什么意思 的文章

 

随机推荐