没有c++ 11如何使用std::begin和std::end ?

How can I use std::begin and std::end without C++11?

本文关键字:std end begin c++ 何使用 没有      更新时间:2023-10-16

我正在尝试编写将编译为POJ的代码。POJ不使用c++ 11,所以我不能使用真正基本的STL函数,如std::to_string, std::beginstd::end。我环顾四周,发现另一个StackOverflow问题询问std::to_string。为了让std::to_string代码可以用一个简单的g++ myfile.cpp命令编译,一个用户建议使用这个补丁,它可以很好地工作:

namespace patch
{
    template < typename T > std::string to_string( const T& n )
    {
        std::ostringstream stm ;
        stm << n ;
        return stm.str() ;
    }
}

我想为std::begin, std::endstd::stoi做同样的事情,但我不确定如何做到这一点。我对STL很不熟悉。我只是想我的工作c++ 11代码编译与ms - vc++ 6.0或g++ 没有任何标志等。我怎么能做到这一点?

非常简单。例如,下面是std::begin:

template <typename C>
typename C::iterator my_begin(C& ctr) { return ctr.begin(); }
template <typename C>
typename C::const_iterator my_begin(const C& ctr) { return ctr.begin(); }
template <typename C, size_t sz>
C* my_begin(C (&ctr)[sz]) { return &ctr[0]; } 
template <typename C, size_t sz>
const C* my_begin(const C (&ctr)[sz]) { return &ctr[0]; } 

boost::lexical_cast可以完成与to_string相同的工作,并且不需要c++ 11。下面是一个简单的例子:

std::string s = boost::lexical_cast<std::string>(12345)