使C++ STL容易使用的两个技巧

ZDNet软件频道 时间:2002-09-02 作者:BUILDER.COM |  我要评论()
本文关键词:
STL(Standard Template Library:标准模板库)为用模板实现的代码可重用性和可扩充性提供了算法和容器。在函数描述和避免off-by-one错误方面,这里有两个技巧可以帮助你更有效的完成STL。
STL(Standard Template Library:标准模板库)为用模板实现的代码可重用性和可扩充性提供了算法和容器。在函数描述和避免off-by-one错误方面,这里有两个技巧可以帮助你更有效的完成STL。



背景材料:
在阅读本文前,你可以通过阅读《使用C++模板库的优劣》一文来复习有关STL的知识。
如何编写STL中没有定义的函数

许多JAVA爱好者批评STL在std::string模板中没有包含一些十分有用的函数。之所以将这些函数排斥在外是因为你可以很容易自己编写它们。例如,你可以这样实现一个将所有数据类型转换为字符串型的to_string函数:

template< class T>
    inline std::string to_string( const T & Value)
{
    std::stringstream streamOut;
    streamOut << Value;
    return streamOut.str( );
}

//  对原数据类型为string类型的特殊处理
template< >
    inline std::string to_string( const std::string & Value)
{
    return Value;
}


该函数对所有C++内有数据类型均适用。对支持“<<”运算符的类同样适用。

当然,实现与to_string功能相反的函数也是容易的。下面一小段代码将解释这一点。

template< class T>
    inline T from_string( const std::string & ToConvert)
{
    std::stringstream streamIn( ToConvert);
    T ReturnValue = T( );
    streamIn >> ReturnValue;
    return ReturnValue;
}

from_string函数将字符串转化为某一类型。例如,它可以将字符串转化为数据。如果输入有效,本函数将转换并返回它。另外,该函数返回指定的类型的默认值,T()为默认的构造函数。还有,它适用与任何C++内有的数据类型,对任何默认构造函数实现了“>>”操作符的类也同样适用。

注意from_string函数假定你转换的字符串中仅有一个值,任何多余的值都将被忽略。如果字符串有多值并且都是你需要的,请勿使用form_string函数,你可以从流中(直接)读取它们。

下面的例子说明了如何使用上述的两个函数:

int n = 4;
    std::string str = to_string( n);        // "4"
    long l = 534587;
    str = to_string( l);                    // "534587"
    n = from_string< int>( "a");            // 0
    int nTest = from_string< int>( "5744"); // 5744
    int nTest2 = from_string< int>( "57y4"); // 57
    int nTest3 = from_string< int>( "5743 65"); // 5743; 65 ignored !!!
    return 0;



百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134