澳门皇冠金沙网站▎在线官网
做最好的网站

澳门皇冠金沙网站,在线官网C++算法实源码分析

2019-11-14 作者:网络服务   |   浏览(131)

C++算法实源码分析,算法源码分析

includes:

// TEMPLATE FUNCTION includes WITH PRED
template<class _InIt1,
    class _InIt2,
    class _Pr> inline
    bool _Includes(_InIt1 _First1, _InIt1 _Last1,
        _InIt2 _First2, _InIt2 _Last2, _Pr _Pred)
    {    // test if set [_First1, _Last1) in [_First2, _Last2), using _Pred
    for (; _First1 != _Last1 && _First2 != _Last2; )
        if (_DEBUG_LT_PRED(_Pred, *_First2, *_First1))
            return (false);
        else if (_Pred(*_First1, *_First2))
            ++_First1;
        else
            {    // advance both
            ++_First1;
            ++_First2;
            }
    return (_First2 == _Last2);
    }

template<class _InIt1,
    class _InIt2,
    class _Pr> inline
    bool includes(_InIt1 _First1, _InIt1 _Last1,
        _InIt2 _First2, _InIt2 _Last2, _Pr _Pred)
    {    // test if set [_First1, _Last1) in [_First2, _Last2), using _Pred
    _DEBUG_ORDER_PRED(_First1, _Last1, _Pred);
    _DEBUG_ORDER_PRED(_First2, _Last2, _Pred);
    return (_Includes(_Unchecked(_First1), _Unchecked(_Last1),
        _Unchecked(_First2), _Unchecked(_Last2), _Pred));
    }

        // TEMPLATE FUNCTION includes
template<class _InIt1,
    class _InIt2> inline
    bool includes(_InIt1 _First1, _InIt1 _Last1,
        _InIt2 _First2, _InIt2 _Last2)
    {    // test if all [_First1, _Last1) in [_First2, _Last2), using operator<
    return (_STD includes(_First1, _Last1, _First2, _Last2,
        less<>()));
    }

在The C++ Standard Library (second edition, 3rd print)中指出这个算法的复杂度最多是2*(numElems+numSearchElems)-1次比较。

http://www.bkjia.com/cjjc/1078406.htmlwww.bkjia.comtruehttp://www.bkjia.com/cjjc/1078406.htmlTechArticleC++算法实源码分析,算法源码分析 includes: // TEMPLATE FUNCTION includes WITH PRED template class _InIt1, class _InIt2, class _Pr inline bool _Includes(_InIt1 _澳门皇冠金沙网站,在线官网,First1,...

什么是STL呢?

STL : standard template library,“标准模版库”的意思。基本上可以这么说,STL是一些“容器”的集合,是算法和一些组件的集合。这些算法和容器的集合是精英中的精英的杰作。它的目的是标准化组件,避免重复开发。

学习STL,我觉得应该从list学起,没别的,就因为它简单,容易上手。

首先,我们要明白一些基本概念。

模板(Template):类、结构等的宏(macro)。正规的名字:范型(generic)。

                 一个类的模板叫:范型类(generic class)。

                一个函数的模板叫:范型函数(generic function)。

容器(Container):可容纳一些数据的模版类。STL中有vector、set、map、multimap等

向量(Vector):基本数组模板,此乃一容器。

游标(Iterator):是一指针,用来指向STL容器中的元素,也可指向其它元素。

本篇主要内容:定义和初始化一个list,计算它的元素的数量,从一个list里查找、删除元素等。

一、定义list。我们可以这样定义一个list。

//........注意:这样是错误的!!!..............这是我犯的第一个错误

#include   "string.h"

#include   "list.h"                     //这儿错误!!

using namespace std;

int main(void)

{

list<string>   strlist;

return 0;

}

编译会出现如下错误:

includelist.h(37) : error C2146: syntax error : missing ';' before identifier 'Length'
includelist.h(37) : error C2501: 'DWORD' : missing storage-class or type specifiers
includelist.h(37) : error C2501: 'Length' : missing storage-class or type specifiers
includelist.h(53) : error C2146: syntax error : missing ';' before identifier 'GetPrevLink'
includelist.h(53) : error C2433: 'WINAPI' : 'inline' not permitted on data declarations
includelist.h(53) : fatal error C1004: unexpected end of file found

原因其实很简单:"list"和"list.h" 是完全不同的,“list.h” 是c形式的双向链表,而“list”是标准的c++的容器。

正确的应该这样:

#include "string"

#include "list"

using namespace std;

int main(void)

{

list<string>   strlist;

return 0;

}

编译你会发现一大队错误不见了,取而代之的是一大堆警告。不同紧张,这是正常现象,有时候编译器对标准c++ stl 支持不是太好,就会出现这种现象,完全可以不理会。

到目前为止,我们只是定义了一个list,并没有做任何事情。

现在我们来把一个字符串装进这个list。再作之前,有一个东东需要我们了解,那就是“值类型”。

”值类型“ 就是list 中对象的类型,这儿是string 字符串。

本文由澳门皇冠金沙网站发布于网络服务,转载请注明出处:澳门皇冠金沙网站,在线官网C++算法实源码分析

关键词: