在一行中创建一个带前缀的序列

时间:2010-02-16 19:00:52

标签: c++ stl boost

给定初始化变量unsigned aunsigned b b > astd::vector<std::string> strings大小b-a。如何填写strings元素,例如"x3" "x4" "x5" "x6"(如果a=3b=7)任意ab使用一个C ++命令(意味着一个分号:))?

6 个答案:

答案 0 :(得分:8)

真是个挑战!

while (a < b) strings.push_back('x' + boost::lexical_cast<std::string>(a++));

另外,将冗长与曼努埃尔的回答进行比较:)

答案 1 :(得分:6)

#define IM_NOT_A_SEMICOLON_REALLY ;然后随意进行。

答案 2 :(得分:3)

不太具挑战性......

std::transform(
    boost::make_counting_iterator(a), boost::make_counting_iterator(b), 
    strings.begin(), 
    "x" + boost::lambda::bind(boost::lexical_cast<std::string, unsigned int>, 
                              boost::lambda::_1));

答案 3 :(得分:3)

Ben叔叔答案的衍生物,但仅使用STL

while( a < b ) vStrings.push_back( 'x' + ( (std::stringstream&)( std::stringstream() << a++ ) ).str() );

答案 4 :(得分:1)

BOOST_FOREACH(std::string & str, strings) str = "x" + boost::lexical_cast<std::string>(a++);

答案 5 :(得分:1)

滥用逗号运算符,这显然不是分号:

while (a<b) {
   char s[12],
        t = (snprintf(s, 11, "x%d", a++), strings.push_back(s), 0);
}