gpt4 book ai didi

c++ - 如何更改定界符的位置?

转载 作者:太空狗 更新时间:2023-10-29 19:44:31 26 4
gpt4 key购买 nike

这个例子:

#include <iostream>
#include <iterator>
#include <algorithm>

int main()
{
int v[] = { 1, 2, 3 };

std::copy( &v[0], &v[3], std::ostream_iterator< int >( std::cout, "\n " ) );
}

产生下一个输出:

1
2
3
 

有没有办法更改示例以使其产生下一个输出?


1
2
3

PS 我知道我可以使用 for 循环,但我对使用算法和迭代器的解决方案很感兴趣。

最佳答案

std::ostream_iterator 无法做到这一点。 (恕我直言,应该有是,但它不在那里。)如果你不介意写一个额外的小函数或类,您可以使用 std::transform,例如:

struct FormatString
{
std::string operator()( std::string const& original ) const
{
return ' ' + original + '\n';
}
};

// ...
std::transform(
v.begin(), v.end(),
std::ostream_iterator<std::string>( std::cout ),
FormatString() );

如果你有 C++11,你可以为 FormatString 使用 lambda。

我发现这种需求经常发生,所以我写了一个PatsubstTransformer——一个功能对象,基本上实现了 GNU make 的 $(patsubst...) 函数。所以我只想必须写:

std::transform(
v.begin(), v.end(),
std::ostream_iterator<std::string>( std::cout ),
PatsubstTransformer( "%", " %\n" ) );

我发现我经常使用它。 (我还发现更多地使用 std::transformstd::copy 更合适,因为我输出的是一个转换。)

关于c++ - 如何更改定界符的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7345649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com