C++编程 - 回字有四样写法,你知道么?

来源:互联网 发布:精硕科技 数据分析师 编辑:程序博客网 时间:2024/05/21 09:58

C++编程 - 回字有四样写法,你知道么?

作者:flyfish 2014-3-31

茴香豆的茴字,怎样写的?这次孔乙己一把,循环多种写法,排除while,do while,排除第三方库,Boost库等

开始分茴香豆吃

首先定义一个向量vecCollection,添加10元素,

目的在vecCollection中统计大于5的元素的个数。

 

填充元素

int nCount = 0;    std::vector<int> vecCollection;    for (inti=0;i<10;i++)    {        vecCollection.push_back(i);    }

1 数组下标[]访问

int nCount=0;for (UINT i = 0; i < vecCollection.size() ; i++ )    {        if(vecCollection[i]>5)        {            nCount++;        }      }

2 数组下标at访问

int nCount=0;    for (UINT i = 0; i < vecCollection.size() ; i++ )    {        if(vecCollection.at(i)>5)        {            nCount++;        }      }


at进行了边界检查,而[]没有,例如vecCollection[10],vecCollection.at(10)结果不同。

 

3迭代器访问 

    int nCount = 0;    std::vector<int>::iterator iter;    for ( iter = vecCollection.begin() ; iter !=vecCollection.end() ; iter++ )    {        if( (*iter) > 5)        {            nCount++;        }    }


迭代器iterator把容器Containers和算法Algorithms分开 计算个累加和很容易 例如

int nSum=std::accumulate(vecCollection.begin(),vecCollection.end(),0);

4 auto简化代码

int nCount = 0;    for ( auto iter =vecCollection.begin() ; iter != vecCollection.end() ; iter++ )    {        if( (*iter) > 5)        {            nCount++;        }    }

 auto已经不是原来那个auto了.早期是声明具有局部生存期的变量,只是个摆设,几乎无人使用。从C++11开始则是从声明初始化表达式中推导出变量类型,简化代码。

5 函数指针

int nCount = 0; void Function(int nElement){    if (nElement>5)    {        nCount++;    }} std::for_each(vecCollection.begin(),vecCollection.end(), Function);


6 函数对象

class CFunctor{public:    explicit CFunctor(int&nCount)        :m_nCount(nCount)    {    }    void operator()(int nElement) const    {        if(nElement>5)        {            m_nCount++;        }    }private:    CFunctor&operator=(constCFunctor&);    int& m_nCount;};        int nCount = 0;    std::for_each(vecCollection.begin(),vecCollection.end(), CFunctor(nCount)); 


    7 lambda

  

  int nCount = 0;    std::for_each(vecCollection.begin(),vecCollection.end(),[&nCount](int nElement)    {          if(nElement > 5)        {            nCount++;        }      });

8 全是STL

int nCount=std::count_if(vecCollection.begin(),vecCollection.end(),std::bind2nd(std::greater<int>(),5));

9 for each

int nCount = 0;for each(auto i in vecCollection){if (i>5){nCount++;}}


10 C++11

int nCount = 0;for (auto v : vecCollection){if (v > 5){nCount++;}}


 

0 0
原创粉丝点击