STL中常用的c++语法

函数调用操作(c++语法中的左右小括号)可以被重载,STL的特殊版本都以仿函数形式呈现。如果对某个class进行operator()重载,它就成为一个仿函数。

#include <iostream>
using namespace std;

template<class T>
struct Plus
{
    T operator()(const T& x, const T& y)const
    {
        return x + y;
    }
};

template<class T>
struct Minus
{
    T operator()(const T& x, const T& y)const
    {
        return x - y;
    }
};

int main()
{
    Plus<int>plusobj;
    Minus<int>minusobj;

    cout << plusobj(3, 4) << endl;
    cout << minusobj(3, 4) << endl;

    //以下直接产生仿函数的临时对象,并调用
    cout << Plus<int>()(43, 50) << endl;
    cout << Minus<int>()(43, 50) << endl;

    system("pause");
    return 0;
}

产生临时对象的方法:在类型名称后直接加一对小括号,并可指定初值。stl常将此技巧应用于仿函数与算法的搭配上。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

/*
template <class InputIterator,class Function>
Function for_each(InputIterator first, InputIterator last, Function f)
{
    for (; first != last; ++first)
    {
        f(*first);
    }
    return f;
}
*/

template <typename T>
class print
{
public:
    void operator()(const T& elem)
    {
        cout << elem << ‘ ‘ << endl;
    }
};

int main()
{
    int ia[6] = { 0,1,2,3,4,5 };
    vector<int>iv(ia, ia + 6);

    for_each(iv.begin(), iv.end(), print<int>());

    system("pause");
    return 0;
}

静态常量整数成员在class内部直接初始化,否则会出现链接错误。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

template <typename T>
class testClass
{
public:
    static const int a = 5;
    static const long b = 3L;
    static const char c = ‘c‘;
    static const double d = 100.1;
};

int main()
{
    cout << testClass<int>::a << endl;
    cout << testClass<int>::b << endl;
    cout << testClass<int>::c << endl;
    //下面的语句出错,带有类内初始值设定项的静态数据成员必须具有不可变的常量整型
    cout << testClass<int>::d << endl;

    system("pause");
    return 0;
}

increment(++)实现(前置式及后置式),dereference(*)实现

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

class INT
{
    friend ostream& operator<<(ostream& os, const INT& i);
public:
    INT(int i) :m_i(i) {};
    //自增然后得到值
    INT& operator++()
    {
        ++(this->m_i);
        return *this;
    }
    //先得到值然后自增
    const INT operator++(int)
    {
        INT temp = *this;
        ++(this->m_i);
        return temp;
    }
    //取值
    int& operator*() const
    {
        return (int&)m_i;
        //下面的语句会出错,因为将int&类型的引用绑定到const int类型的初始值设定项
        //return m_i;
    }
private:
    int m_i;
};

ostream& operator<<(ostream& os, const INT& i)
{
    os << ‘[‘ << i.m_i << ‘]‘ << endl;
    return os;
}

int main()
{
    INT I(5);
    cout << I++;
    cout << ++I;
    cout << *I;

    system("pause");
    return 0;
}
时间: 2024-11-09 05:58:17

STL中常用的c++语法的相关文章

STL中常用数据结构

STL中常用的数据结构: [1]  stl中stack.queue默认的底层实现为deque结构. [2]  deque:用map管理多个size大小的连续内存块,方便头尾插入. [3]  vector:变长动态数组,每次增大1.5倍,删除元素时不释放空间. [4]  priority_queue底层默认采用vector向量O(nlogn). [5]  list:双向链表容器. [6]  slist:单向链表容器. [7]  bit_vector:一个bit位元素的序列容器,常用于硬件端口的控制

STL中常用的vector,map,set 用法

STL中常用的vector,map,set 用法 C++的标准模板库(Standard Template Library,简称STL)是一个容器和算法的类库.容器往往包含同一类型的数据.STL中比较常用的容器是vector,set和map,比较常用的算法有Sort等. . 一. vector 1.声明: 一个vector类似于一个动态的一维数组. vector中可以存在重复的元素! vector<int> a;          // 声明一个元素为int类型的vector a vectot&

stl中常用的排序算法

#include"iostream" #include"vector" using namespace std; #include"string" #include"algorithm" void main_mergr() { vector<int > v1; v1.push_back(1); v1.push_back(2); v1.push_back(3); vector<int > v2; v2.p

C++ STL中vector(向量容器)使用简单介绍

原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相当于数组,但其大小可以不预先指定,并且自动扩展.它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组,或者作为动态内存. 在创建一个vector 后,它会自动在内存中分配一块连续的内存空间进行数据存储,初始的空间大小可以预先指定也可以由vector 默认指定,这个大小即cap

Notepad++中常用的插件【转】

转自:http://www.crifan.com/files/doc/docbook/rec_soft_npp/release/htmls/npp_common_plugins.html 1.4. Notepad++中常用的插件 1.4.1. 插件管理器: Plugin Manager 插件功能:此插件可以帮你管理插件,包括查看当前已经安装的插件有哪些,以及自动帮你下载相应的插件. 插件用途:主要用于管理(安装和卸载)插件 插件安装:在安装过程中,默认已选择安装此插件:图 2.2 “Notepa

【学习ios之路:Objective-C】OC中常用的系统排序方法

①.OC中常用排序方法: 1).不可变数组 - (NSArray *)sortedArrayUsingSelector:(SEL)comparator; - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr; 2)可变数组 - (void)sortUsingSelector:(SEL)comparator; - (void)sortUsingComparator:(NSComparator)cmptr; 3).字典排序 - (NS

STL中的set容器的一点总结2

http://blog.csdn.net/sunshinewave/article/details/8068326 1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作.vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入.排序.删除.

项目开发中常用的PHP函数

日期操作 为了便于存储.比较和传递,我们通常需要使用strtotime()函数将日期转换成UNIX时间戳,只有在显示给用户看的时候才使用date()函数将日期转换成常用的时间格式. strtotime()  函数将任何英文文本的日期时间描述解析为 Unix 时间戳 eg: <?php echo(strtotime("now")); echo(strtotime("3 October 2005")); echo(strtotime("+5 hours&

javascript中常用的事件绑定方法

我们要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数.所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称. 在JavaScript中,有三种常用的绑定事件的方法: 在DOM元素中直接绑定: 在JavaScript代码中绑定: 绑定事件监听函数. 一. 在DOM元素中直接绑定 这里的DOM元素,可以理解为HTML标签.JavaScript支持在标签中直接绑定事件,语法为:    onXXX="JavaScript Code" 其中