gpt4 book ai didi

c++ - 如何格式化 thrust::copy(ostream_iterator)

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:36 26 4
gpt4 key购买 nike

总结

我正在使用 this 打印设备 vector 例子。我想让阵列排成一行。

格式设置仅应用于第一个数字。

我的代码

template <typename Iterator>
void print_range(const std::string& name, Iterator first, Iterator last)
{
typedef typename std::iterator_traits<Iterator>::value_type T;

std::cout << name << ": ";
thrust::copy(first, last, std::ostream_iterator<T>(std::cout << std::setw(4) << std::setfill(' '), " "));
std::cout << "\n";
}

重要的一行是:

thrust::copy(first, last, std::ostream_iterator < T > (std::cout << std::setw(4) << std::setfill(' '), " "));
电流输出
Box Numbers :: _110 109 108 109 108 107 106 105 106 105 
Difference :: _110 -1 -1 1 -1 -1 -1 -1 1 -1
Difference 2:: _110 -111 0 2 -2 0 0 0 2 -2
Key Vector :: _110 -1 -1 1 -1 -1 -1 -1 1 -1
Inclusive :: _110 -1 -2 1 -1 -2 -3 -4 1 -1
期望的输出
Box Numbers :: _110  109  108  109  108  107  106 
Difference :: _110 -1 -1 1 -1 -1 -1
Difference 2:: _110 -111 0 2 -2 0 0
Key Vector :: _110 -1 -1 1 -1 -1 -1
Inclusive :: _110 -1 -2 1 -1 -2 -3

格式设置仅应用于第一个数字。如果我更改宽度或填充,它会应用于第一个数字,但不会应用于其余数字。

注意

  • 我只使用了“_”字符,这样我就可以看到在何处应用格式。

  • 输出在代码块中,否则堆栈溢出会覆盖我的格式并删除顺序空格。

最佳答案

我找不到将 thrust::copy 的输出格式化为 cout 的方法。最终复制到宿主载体。然后我可以遍历主机 vector 并格式化输出。

不太优雅,但可以为此目的完成工作。

    template <typename Iterator>
void print_range(const std::string& name, Iterator first, Iterator last)
{
// Print Vector Name
std::cout << name << ": ";

// Copy Vector to host
int print_length = thrust::distance(first, last);
thrust::host_vector<int> to_print(print_length);
thrust::copy(first, last, to_print.begin());

// Print Vector
for (auto val : to_print)
std::cout << setw(4) << val;

std::cout << endl;
}

编辑

我找到了另一个同样有效的选项。 Example

使用 for_each 调用自定义 printf

//----------------------------
// Print Functor
//----------------------------
struct printf_functor
{
__host__ __device__
void operator() (int x)
{
printf("%4d ", x);
}
};

//----------------------------
// Print Range
//----------------------------
template <typename Iterator>
void print_range(const std::string& name, Iterator first, Iterator last)
{
// Print Vector Name
std::cout << name << ": ";

// Print Each Element
thrust::for_each(thrust::device, first, last, printf_functor());

std::cout << endl;
}

关于c++ - 如何格式化 thrust::copy(ostream_iterator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57432644/

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