c++ - 用字节序列初始化数组的有效方法?

标签 c++ c++11

假设我有一个大小为 n 的字节序列(在“真实”代码中可能是 1..4 个元素),其中 n = 3为了这个例子:

char source[n] = { 'a', 'b', 'c' }

而且我有足够大小的内存范围来保存此序列的 m 个拷贝:

char * dest = new char[m*n]

(是的,我知道 std::vector,是的,它通常优于 new'ing 你自己的内存,不,它不是一个我目前正在处理的代码的选项——无论如何问题仍然是一样的。)

现在我想用 msource 拷贝初始化 dest。有多种方法可以对单个值进行 m 次拷贝,但显然没有一种方法可以对 sequence 值进行 m 次拷贝。当然,我可以使用嵌套循环:

for ( unsigned i1 = 0; i1 < m; ++i1 )
{
    for ( unsigned i2 = 0; i2 < n; ++i2 )
    {
        dest[ i1 * n + i2 ] = source[ i1 ];
    }
}

但不知何故,这缺乏通常告诉我我得到了问题的“正确”解决方案的所有技巧。

C++ 是否为此提供了一些更有效的方法?

最佳答案

这会给你一种正确的感觉吗? (现场观看here)

auto it = dest;
while ((it = std::copy(source, source + n, it)) 
       != dest + m * n);

关于c++ - 用字节序列初始化数组的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35107055/

相关文章:

c++ - 将数组作为值传递的函数中基于范围的 for 循环

c++ - visual studio lnk2019 和 1120 错误

c++ - 避免需要使用表达式模板进行#define

c++ - 移动构造函数调用

c++ - boost::call_traits - 为什么 gcc 为此给出 false?

c++ - std::list::merge() 对包含对象的列表失败

c++ - 编译时循环遍历模板化类型

c++ - Boost asio 与标准输入混淆?

c++ - 损坏的 HTML - 浏览器不会从我的网络服务器下载整个 HTTP 响应,CURL 会

c++ - 试图理解 C++11 中宏、模板和枚举的复杂使用