C++ STL增量前后运算符的概念差异

C++ STL增量前后运算符的概念差异,c++,stl,C++,Stl,据推测: for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter) {} (向量::迭代器iter=ivec.begin();iter!=ivec.end();++iter) {} 当涉及到内置类型(如int等)的前置/后置增量时,我确实理解其中的区别,但就迭代器而言,++iter和iter++之间的区别是什么?(请记住,我知道两者在这里产生相同的结果)。++iter最有可能比iter+

据推测:

for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
{}
(向量::迭代器iter=ivec.begin();iter!=ivec.end();++iter) {}
当涉及到内置类型(如
int
等)的前置/后置增量时,我确实理解其中的区别,但就迭代器而言,
++iter
iter++
之间的区别是什么?(请记住,我知道两者在这里产生相同的结果)。

++iter
最有可能比
iter++
更快,但决不会比
iter++

在实现增量后运算符
iter++
时,需要在实现增量后运算符
++iter
的基础上生成一个额外的临时变量(当原始的
iter
增量时,返回该临时变量),因此除非编译器可以优化(是的,它可以)增量后运算符,然后
++iter
很可能比
iter++


鉴于上述情况,最好在循环条件下使用
++iter

一般而言,增量前通常优于增量后,因为它可能允许一些优化,从而避免构建临时性。至于它是如何实现的,这取决于编译器中包含的STL。

它的意思与integer相同

对于pre-increment,iter是递增的,返回的对象与iter相同

对于增量后,必须将iter复制到临时文件,然后对iter进行增量,并返回副本。然而,大多数编译器可以优化掉这个拷贝没有被使用的事实,因此可以消除这个拷贝,使它与增量前的拷贝相同


对于那些不能执行的编译器,后增量可能会导致执行速度稍慢,但通常情况下不再如此。

不同之处在于,它们不会产生相同的结果,而无论使用何种增量形式,此特定示例都会产生相同的结果。pre-increment表单首先递增该值,然后返回该值;而增量后表单会增加结果,但会返回增量前的值。对于基本类型来说,这通常是免费的,但是对于迭代器之类的东西,它需要创建一个临时值来保存非递增的值,以便以后返回。

这一切都取决于它们的实现方式

但是最常见的增量后执行方式是在增量前添加一份额外副本

class MyIter
{
    // Definition of pre-increment:
    //    ++object;
    MyIter& operator++()
    {
        /* Increment the iterator as appropriate
           You should be changing the object in place
         */


        // Once you are done return yourself.
        return *this;
    }
    // Definition of post-increment:
    //    object++;
    MyIter operator++(int)
    {
        // Post increment (returns the same value) so build the result.
        MyIter  result(*this);

        // Now do the increment using pre-increment on the current object
        ++(*this);

        // return the result.
        return result;
    }
};
因此,后增量的标准实现调用pre-increment,并创建对象的副本。注意,返回时还有一个额外的副本构造,但编译器通常会将其非法化


注意预增量,因为它影响相同的ObjjCT通常返回一个引用到ITSLF(因此不返回成本)。< /P>我曾经做过一次。我是C++新手。所以我不理解你的代码,尤其是标题部分(操作符重载??)@yapkm01:它为类MyIter定义了++操作符。