STL ++iter与iter++区别

阅读更多

 

 之前编码一直用的是iter++,同事说该方式效率比较低。带着疑惑看STL源码:

 

// vector

_Myiter& operator++()
	{	// preincrement
	++*(_Mybase *)this;
	return (*this);
	}

_Myiter operator++(int)
	{	// postincrement
	_Myiter _Tmp = *this;
	++*this;
	return (_Tmp);
	}

 

果不其然,++iter 前向表达式返回引用,而iter++返回的却是一临时对象。

原来前向后向重载表达式的差异,只是多了一个int参数。

 

// Test
class Test
{
public:
        Test():val(0){}
        ~Test(){}

        Test &operator++()
        {
                ++val;
                printf("Pre incr val:%d\n", val);
                return (*this);
        }

        Test operator++(int)
        {
                Test pTmp = *this;              // save
                val++;
                printf("Post incr val:%d\n", val);
                return pTmp;
        }

private:
        int val;
};

// main
int main()
{
        Test test;
        test++;
        ++test;
        return 0;
}

 

输出:

Post incr val:1

Pre incr val:2

 

 

 

 

你可能感兴趣的:(STL,迭代器)