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