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

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++;
	}
}


 

你可能感兴趣的:(lambda,for循环,C++11)