【问题标题】:Creating a prefixed sequence in one line在一行中创建一个前缀序列
【发布时间】:2010-02-16 19:00:51
【问题描述】:

给定大小为b-ab > astd::vector<std::string> strings的初始化变量unsigned aunsigned b。如何用元素填充strings,例如"x3" "x4" "x5" "x6"(在a=3b=7 的情况下)用于任意ab,带有一个C++ 命令(意思是一个分号:))?

【问题讨论】:

  • 应该是社区维基吗?
  • 想要有人帮你做作业吗?只需将其标记为“挑战”。我还需要画一个栅栏。 ensign.ftlcomm.com/people/TomNhuck/ted.html
  • 使用 boost 是不是有点像使用多个分号?我认为完全是!
  • 最近在 C++ 中使用最少行数有什么问题?我的信念是行数是最少关注的,可读性更高(而且编译器会优化你的代码,无论是一行还是多行)。此外,我发现编写多行代码有助于调试和设置断点。 :-)
  • 兄弟姐妹们!看看罪的后果吧!我们已经允许代码高尔夫在我们中间,现在我们因我们的行为受到惩罚!

标签: c++ stl boost


【解决方案1】:

这是多么大的挑战!

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

另外,将详细程度与 Manuel 的答案进行比较:)

【讨论】:

    【解决方案2】:

    #define IM_NOT_A_SEMICOLON_REALLY ;然后随意进行。

    【讨论】:

      【解决方案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));
      

      【讨论】:

      • +1 如果您不应该修改a,这可能是预期的答案。但是你会在实践中认真使用这样的东西吗?
      • 我不认为这很糟糕,我看到人们以最糟糕的方式滥用boost::lambda。但是,是的,在这种情况下,一个简单的 for 循环会更易于编写且更具可读性。
      • 由于示例中的strings 已经预初始化,strings.begin() 会更合适和正确,但无论如何这比我尝试过的 boost.bind 方法更容易。我喜欢这样做的 STL 方式,但是 while 循环是一个很好的答案,可以看到有时很容易不再看到 easy 方式:)
      【解决方案4】:

      UncleBen 答案的派生词,但仅使用 STL

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

      【讨论】:

        【解决方案5】:
        BOOST_FOREACH(std::string & str, strings) str = "x" + boost::lexical_cast<std::string>(a++);
        

        【讨论】:

        • 我看到您已将我的更改恢复为 lexical_cast&lt;string&gt;(a++)。在参考文献(或一般的 C++ 中)的什么地方说函数的模板参数可以推导出为返回类型?我得到的只是:“没有匹配的函数调用'lexical_cast(int)'”
        【解决方案6】:

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

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

        【讨论】:

          猜你喜欢
          • 2012-04-10
          • 1970-01-01
          • 2019-11-10
          • 1970-01-01
          • 2021-02-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多