С учетом инициализированных переменных 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 ++ (что означает одна точка с запятой вообще:) )?
unsigned a
unsigned b
b > a
std::vector<std::string> strings
b-a
strings
"x3" "x4" "x5" "x6"
a=3
b=7
a
b
Какой вызов!
while (a < b) strings.push_back('x' + boost::lexical_cast<std::string>(a++));
Кроме того, сравните многословие с ответом Мануэля:)
#define IM_NOT_A_SEMICOLON_REALLY ; затем продолжайте по желанию.
#define IM_NOT_A_SEMICOLON_REALLY ;
производная ответа UncleBen, но с использованием только STL
while( a < b ) vStrings.push_back( 'x' + ( (std::stringstream&)( std::stringstream() << a++ ) ).str() );
Не слишком сложно ...
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));
Злоупотребление запятыми, которые явно не являются точками с запятой:
while (a<b) { char s[12], t = (snprintf(s, 11, "x%d", a++), strings.push_back(s), 0); }
BOOST_FOREACH(std::string & str, strings) str = "x" + boost::lexical_cast<std::string>(a++);