+ -
当前位置:首页 → 问答吧 → STL里用什么函数将string 反序?

STL里用什么函数将string 反序?

时间:2011-12-12

来源:互联网


 STL里用什么函数将string 反序?

作者: gucheng789   发布时间: 2011-12-12


std::string str;
std::reverse(str.begin(),str.end());

作者: mingliang1212   发布时间: 2011-12-12

除了reverse,还可以
s.assign(s.rbegin(),s.rend());
或者:
s.replace(s.begin(),s.end(),s.rbegin(),s.rend());

作者: thefirstz   发布时间: 2011-12-12

引用 2 楼 thefirstz 的回复:
除了reverse,还可以
s.assign(s.rbegin(),s.rend());
或者:
s.replace(s.begin(),s.end(),s.rbegin(),s.rend());


不要这样啊。。。。
会出问题的。

作者: mingliang1212   发布时间: 2011-12-12

引用 1 楼 mingliang1212 的回复:
std::string str;
std::reverse(str.begin(),str.end());


包装一下
C/C++ code


inline void Reverse(std::string& str) // 反转string字符串 包装STL的reverse()  可以inline
{
    reverse(str.begin(), str.end());
    // STL 反转函数 reverse() 的实现
    /*     template <class BidirectionalIterator>
     *     void reverse(BidirectionalIterator first, BidirectionalIterator last)
     *     {
     *         while ((first != last) && (first != --last))
     *             swap(*first++, *last);
     *     }
     */
}

作者: hongwenjun   发布时间: 2011-12-12


 楼上的兄台,不明白您的代码,为什么要这样包装,Reverse 函数里好像没做什么特殊处理把?、

作者: gucheng789   发布时间: 2011-12-12

引用 3 楼 mingliang1212 的回复:

引用 2 楼 thefirstz 的回复:
除了reverse,还可以
s.assign(s.rbegin(),s.rend());
或者:
s.replace(s.begin(),s.end(),s.rbegin(),s.rend());


不要这样啊。。。。
会出问题的。

什么问题?

作者: thefirstz   发布时间: 2011-12-12

inline void Reverse(std::string& str)
{
  reverse(str.begin(), str.end());
}
经过包装, Reverse(str); 就可以反序了, 比 reverse(str.begin(), str.end());
输入快捷

作者: hongwenjun   发布时间: 2011-12-12


 就是家了一个inline标志,运行时快了一点,就为这个所以要包装??

 

作者: gucheng789   发布时间: 2011-12-12

引用 6 楼 thefirstz 的回复:
引用 3 楼 mingliang1212 的回复:

引用 2 楼 thefirstz 的回复:
除了reverse,还可以
s.assign(s.rbegin(),s.rend());
或者:
s.replace(s.begin(),s.end(),s.rbegin(),s.rend());


不要这样啊。。。。
会出问题的。

什么问题?


前半段复制正常,但是后半段复制的是已经被修改的数据。

作者: mingliang1212   发布时间: 2011-12-12

引用 9 楼 mingliang1212 的回复:

前半段复制正常,但是后半段复制的是已经被修改的数据。

有源代码吗?
发一段我看看,好久不用STL忘记了
我用codeblocks试了下好像可以

作者: thefirstz   发布时间: 2011-12-12

C/C++ code

template<class _BidIt> inline
    void _Reverse(_BidIt _First, _BidIt _Last, bidirectional_iterator_tag)
    {    // reverse elements in [_First, _Last), bidirectional iterators
    for (; _First != _Last && _First != --_Last; ++_First)
        _STD iter_swap(_First, _Last);
    }



想不到我的vs2010里面竟然没有重载随机迭代器的reverse版本。。。算了。就这个吧将就着看吧。。。

作者: mingliang1212   发布时间: 2011-12-12

引用 10 楼 thefirstz 的回复:
引用 9 楼 mingliang1212 的回复:

前半段复制正常,但是后半段复制的是已经被修改的数据。

有源代码吗?
发一段我看看,好久不用STL忘记了
我用codeblocks试了下好像可以


没想到啊没想到,string的实现竟然是这样的。。。。

C/C++ code


    template<class _It>
        _Myt& _Replace(const_iterator _First, const_iterator _Last,
            _It _First2, _It _Last2, input_iterator_tag)
        {    // replace [_First, _Last) with [_First2, _Last2), input iterators
        _Myt _Right(_First2, _Last2);
        replace(_First, _Last, _Right);
        return (*this);
        }



我想去查下标准。。。。

作者: mingliang1212   发布时间: 2011-12-12

作者: thefirstz   发布时间: 2011-12-12