C++ C++;:在没有显式循环的情况下重复输出i次

C++ C++;:在没有显式循环的情况下重复输出i次,c++,C++,有没有一种方法可以避免循环编写尽可能少的代码: for (int i = 0; i < 10; i++) std::cout << 'x'; 使用: std::coutvoid打印(常量字符*s,整数n) { 如果(n>0) { cout最可扩展/可重用的方法是创建一个类似于上面Ed的函数——尽管我会使用stringstream,而不是将函数与打印耦合 IMO,NPE的答案过于严格,只强迫它是一个字符,Ed的答案比C++答案更为C的答案。作为一个方面的好处,函数也允许你流字

有没有一种方法可以避免循环编写尽可能少的代码:

for (int i = 0; i < 10; i++) std::cout << 'x';
使用:

std::cout
void打印(常量字符*s,整数n)
{
如果(n>0)
{

cout最可扩展/可重用的方法是创建一个类似于上面Ed的函数——尽管我会使用stringstream,而不是将函数与打印耦合

IMO,NPE的答案过于严格,只强迫它是一个字符,Ed的答案比C++答案更为C的答案。作为一个方面的好处,函数也允许你流字符、整数、字符串等。

template <class T>
std::string multiplyString(int count, const T &input)
{
    std::stringstream ss;
    for(int i = 0; i < count; i++)
       ss << T;
    return ss.str();
}

int main(argc, char *argv[])
{
    std::cout << multiplyString(10, 'x') << std::endl;
    std::cout << multiplyString(5, "xx") << std::endl;
    std::cout << multiplyString(5, 1234) << std::endl;
}
模板
std::字符串多路复用(整数计数、常量T和输入)
{
std::stringstream-ss;
for(int i=0;i
由于没有其他人提供合理的实施:

std::string
multiplyStrings( int count, std::string const& original )
{
    std::string results;
    results.reserve( count * original.size() );  //  Just optimization
    while ( count > 0 ) {
        results += original;
    }
    return results;
}
由此创建
运算符*
的重载将是不可能的 困难。在命名空间std中定义它们将是未定义的 行为,但依我看,你很有可能
无论如何都可以逃脱。

或者只使用
std::cout我会在最后一条评论的末尾指出笑脸,但有些东西告诉我这不会有帮助。@David,因为没有
std::string
构造函数同时接受字符串和“重复计数”?然而,编写起来很容易。如果您愿意,您甚至可以重载
*
操作符(但由于您不允许将其放入
std::
,因此您不能指望ADL将其提取出来)。极客对极客的类似问题:为什么您认为python中的*10不涉及循环?请尝试foreach;抱歉,问题主体已更正。为什么不使用递归是什么意思?这是递归。递归不是类c语言的最佳选择,但thanks@NikBougalis-这个问题是从哪里来的(似乎缺乏上下文。丹尼斯-首先,这是一个愚蠢的问题。@EdHeal其他人曾问过“为什么不使用递归?”我想我也应该删除我的评论,因为它现在看起来不合适。现在这很聪明。特别是它可以很容易地与
std::string
而不是
char
一起使用。唯一的缺点是它不会返回字符串,如果你需要的话。(如果第一个参数是
std::back\u inserter(myString)
,它将附加到
std::string
)这不是真正合理的(或必要的)使用
std::ostringstream
实现此目的。当需要格式化某些内容时,您可以使用
std::ostringstream
,而不仅仅是连接。同意James--很好的捕获--我本来打算将其作为模板,以便您可以按照我最初的注释对任何内容进行流式处理,但我将输入参数保留为std::string,这不符合目的ose是stringstream的一部分。但是您想流式处理任何内容吗?请记住,最初的问题涉及到
*
(就像在Python中一样……我的预标准字符串类,由于一个奇怪的巧合,它非常非常接近Python的
字符串
)。您不能为
int
重载“*”。并且
int
上的函数结果将不可用,因为没有分隔符。最后,这不正是
ostream\u迭代器
的设计目的吗?
void print(const char *s, int n)
{
   if (n > 0) 
   {
      cout << s;
      print(s, n - 1);
   }
}
template <class T>
std::string multiplyString(int count, const T &input)
{
    std::stringstream ss;
    for(int i = 0; i < count; i++)
       ss << T;
    return ss.str();
}

int main(argc, char *argv[])
{
    std::cout << multiplyString(10, 'x') << std::endl;
    std::cout << multiplyString(5, "xx") << std::endl;
    std::cout << multiplyString(5, 1234) << std::endl;
}
std::generate_n(
    std::ostream_iterator<char>(std::cout, ""),
    10,
    [](){ return 'x'; }
);
std::string
multiplyStrings( int count, std::string const& original )
{
    std::string results;
    results.reserve( count * original.size() );  //  Just optimization
    while ( count > 0 ) {
        results += original;
    }
    return results;
}