问题标签 [stdcopy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
290 浏览

c++ - 将数据从结构二进制复制到 std::vector

我正在使用一个可以从内存中加载 BMP 图像的库。

我有一个代表 BMP 的类。

要从内存中加载,我必须提供一个指向内存中一些 BMP 格式数据的指针和一个用于该数据大小的变量。(void* data, size_t length)

我想将我的数据存储在std::vector. (避免手动内存管理)

我试图编写一个函数来返回 a std::vector<unsigned char>,但我认为我所拥有的不是很好。

显然这不能编译。我想不出任何替代方案std::copy。这真的是适合这项工作的工具吗?

为了使其编译,我认为我应该更改memory.at(x)memory.data() + x......通过这样做,我将使用原始指针 - 这就是为什么我认为没有std::copymemcpy.

我可以对此提出一些建议吗?这有点不合逻辑,如果我早先知道这个要求,我会将我的像素数据存储在数据之前unsigned char的位图文件标题中。不幸的是,现在更改设计将需要大量工作,所以我宁愿不去碰它。

0 投票
2 回答
797 浏览

c++ - 是否可以使用 `std::copy` 将值从可变大小的数组复制到容器?

下面是一个MergeSort实现。我的问题是编译器抱怨std::begin不能应用于可变大小的数组 temp以便进一步使用std:copy.

我正在使用 C++17 和gcc 8.3

错误消息包括:

在此处输入图像描述

0 投票
2 回答
264 浏览

c++ - 使用 std::copy 复制数组时出现分段错误

我正在尝试执行帕斯卡三角形,我需要将一个数组复制到另一个数组,我目前正在使用复制功能,但遇到了著名的分段错误。

这是我的代码:

我在 memcpy 函数中遇到了同样的错误,任何人都可以

0 投票
0 回答
19 浏览

stdvector - 是否有比 std::copy 成本更低的操作来将 uint8_t* 数据​​复制到 uint8_t 类型的向量?

最近我写了一个 c++ 代码,我使用了一个来自外部库的函数。这个函数的一个参数的类型是std::vector,但是我的数据在一个名为payload的变量中,它的类型是const uint8_t*。所以我将我的有效负载数据复制到一个带有 std::copy 的向量中,如下所示:

std::vector my_vector; std::copy(有效载荷,有效载荷 + 长度,back_inserter(my_vector));

由于调用了这么多这段代码,我正在寻找一种成本更低的操作来将我的有效负载数据复制到 my_vector 变量中,以便准备我在代码中使用的函数的输入参数。有没有办法达到这个目的?

0 投票
2 回答
1387 浏览

c++ - 在结构数组上使用 c++ std::copy

我想使用 std::copy 将现有的结构数组复制到新的结构数组。'''local_copy()''' 可以使用常规选项。我想知道在下面描述的这种情况下使用 std::copy 的过程 -

我尝试了代码并在编译时出现以下错误

编译时错误如下 -

提供了一些向量和 int 数据类型的示例。任何人都可以为这种代码结构详细说明 std::copy 的适当顺序吗?谢谢。

0 投票
2 回答
454 浏览

c++ - std::copy、std::copy_backward 和重叠范围

我的参考是std::copystd::copy_backward

template< class InputIt, class OutputIt > OutputIt copy( InputIt first, InputIt last, OutputIt d_first );

复制范围 [first, last) 中的所有元素,从 first 开始,一直到 last - 1。如果 d_first 在 [first, last) 范围内,则行为未定义。在这种情况下,可以使用 std::copy_backward 代替。

模板< class BidirIt1, class BidirIt2 > BidirIt2 copy_backward( BidirIt1 first, BidirIt1 last, BidirIt2 d_last )

将由 [first, last) 定义的范围中的元素复制到以 d_last 结尾的另一个范围。以相反的顺序复制元素(首先复制最后一个元素),但保留它们的相对顺序。

如果 d_last 在 (first, last] 之内,则行为未定义。在这种情况下,必须使用 std::copy 而不是 std::copy_backward。

复制重叠范围时,std::copy 适用于向左复制(目标范围的开头在源范围之外),而 std::copy_backward 适用于向右复制(目标范围的结尾在源范围之外)范围)。

根据以上描述,我得出以下推论:

copy 和 copy_backward 最终都将相同的源范围 [first, last) 复制到目标范围,尽管在前者的情况下,复制从第一个到最后一个 - 1,而在后者的情况下,复制从最后一个发生-1 到第一。在这两种情况下,源范围中元素的相对顺序都会保留在结果目标范围中。

但是,以下两个规定背后的技术原因是什么:

1) 在复制的情况下,如果 d_first 在 [first, last) 范围内,则会导致未定义的行为(暗示将源范围复制到目标范围的不成功以及可能的系统故障)。

2) 在 copy_backward 的情况下,如果 d_last 在范围内(第一个,最后一个),则会导致未定义的行为(暗示将源范围复制到目标范围的不成功以及可能的系统故障)。

我假设一旦我理解了上述两个语句的含义,将 copy 替换为 copy_backward 以避免上述未定义行为场景的建议对我来说将变得显而易见。

同样,我还假设在向左复制时提到复制的适当性(我不清楚这个概念),以及在向右复制时的 copy_backward(我也不清楚这个概念),将开始一旦我理解了 copy 和 copy_backward 之间的上述区别,就有意义了。

一如既往地期待您的有益想法。

附录

作为后续,我编写了以下测试代码来验证 copy 和 copy_backward 的行为,以实现相同的操作。

以下是程序输出:

显然, copy 会产生预期的结果,而 copy_backward 不会,即使 d_first 在 [first, last) 范围内。此外, d_last 也在范围内(第一个,最后一个),根据文档,这应该会在 copy_backward 的情况下导致未定义的行为。

所以实际上,在copy_backward的情况下,程序输出与文档一致,而在copy的情况下则不是。

再次值得注意的是,根据文档,在这两种情况下, d_first 和 d_last 确实满足分别导致 copy 和 copy_backward 未定义行为的条件。但是,仅在 copy_backward 的情况下才会观察到未定义的行为。

0 投票
1 回答
215 浏览

c++ - 将向量元素复制到 std::array

我有一个 uint8 类型的元素向量,我将其复制到一个 std::array 中。再次进行一些操作后,我需要将元素从 std::array 复制到向量。请在下面找到代码

现在的问题是我的数组大小为 5,但向量只有 3 个元素。当我将数组中的元素复制到一个新向量时,我得到了额外的 2 个零。我怎样才能得到如下输出

0 投票
2 回答
369 浏览

c++ - 是否实现了 std::copy 以使用多个线程?

我想尽快将一个向量复制到另一个向量中。

一种方法是使用std::copy

但是由于向量很长,我想知道该std::copy函数是否已实现,因此它将使用多个线程。

我可以提供一个自定义逻辑来将向量分成相等的分离部分,分别复制这些项目,但我不想再次重新发明轮子。

std::copy多线程也有效吗?

0 投票
1 回答
58 浏览

c++ - 尝试将 std::copy() 与 std::back_inserter 一起使用以从 std::cin 读取时出现不同的结果

当我写这个答案时,我试图扫描一个空格分隔的输入字符串并将其存储在一个向量中。用户建议使用std::back_inserter接受std::copy()输入,而不是使用std::istringstream

这看起来很好(也很好用!)。但是,当我将代码复制粘贴到 Visual Studio 中时,它只会在非数字输入时中断,例如:

3 2 1 4<空格/无空格>k

这是 MVCC 中的错误吗?

我正在将 MVCC v14.27 (142) 与 Visual Studio 2019 (16.7) 一起使用。

0 投票
1 回答
42 浏览

c++ - 从 initializer_list 初始化向量会产生不明确的编译错误

std::copy如果注释掉了,则此代码编译,并且atc初始化程序未注释。

但是,正如我所写的:

我在 Stack Overflow 上阅读了六个类似的问题,但没有一个能说明为什么这个版本不受欢迎。有什么建议么?