没有c++ 11如何使用std::begin和std::end ?
How can I use std::begin and std::end without C++11?
我正在尝试编写将编译为POJ的代码。POJ不使用c++ 11,所以我不能使用真正基本的STL函数,如std::to_string
, std::begin
或std::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::end
和std::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)
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- std::multimap<std::chrono::milliseconds, T>::rbegin 在 MSVS-13 中指向 end()?
- 为什么std::begin()和std::end()适用于固定数组,而不适用于动态数组
- 重载 std::begin() 和 std::end() 用于非数组
- std::begin() 和 std::end() 不适用于类中的未知长度数组
- std::end and std::begin in a function (C++)
- 依靠 ADL 实现 std::begin() 和 std::end()
- std::end(myVector) 和 myVector.end() 之间的区别
- 使用 std::begin 和 std::end 进行向量初始化
- 使用 std::begin() 和 std::end() 从数组构造向量
- 我可以专门使用 std::begin 和 std::end 来获取 equal_range() 的返回值吗?
- std::begin 和 std::end 不使用指针并参考原因
- 使用std::begin()、std::end()将ArrayXd转换为stl向量,
- 字符串的std::end应该指向null终止符之后
- 带有std::begin()、std::end()问题的C++11自动迭代器类型
- std::begin和std::end的const重载的目的是什么
- std::end 如何知道数组的结尾
- 在c++中,对于所有容器类型,std::end都保证为0(1)
- 没有c++ 11如何使用std::begin和std::end ?