问题标签 [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.
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::copy
比memcpy
.
我可以对此提出一些建议吗?这有点不合逻辑,如果我早先知道这个要求,我会将我的像素数据存储在数据之前unsigned char
的位图文件标题中。不幸的是,现在更改设计将需要大量工作,所以我宁愿不去碰它。
c++ - 使用 std::copy 复制数组时出现分段错误
我正在尝试执行帕斯卡三角形,我需要将一个数组复制到另一个数组,我目前正在使用复制功能,但遇到了著名的分段错误。
这是我的代码:
我在 memcpy 函数中遇到了同样的错误,任何人都可以
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 变量中,以便准备我在代码中使用的函数的输入参数。有没有办法达到这个目的?
c++ - 在结构数组上使用 c++ std::copy
我想使用 std::copy 将现有的结构数组复制到新的结构数组。'''local_copy()''' 可以使用常规选项。我想知道在下面描述的这种情况下使用 std::copy 的过程 -
我尝试了代码并在编译时出现以下错误
编译时错误如下 -
提供了一些向量和 int 数据类型的示例。任何人都可以为这种代码结构详细说明 std::copy 的适当顺序吗?谢谢。
c++ - std::copy、std::copy_backward 和重叠范围
我的参考是std::copy和std::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 的情况下才会观察到未定义的行为。
c++ - 将向量元素复制到 std::array
我有一个 uint8 类型的元素向量,我将其复制到一个 std::array 中。再次进行一些操作后,我需要将元素从 std::array 复制到向量。请在下面找到代码
现在的问题是我的数组大小为 5,但向量只有 3 个元素。当我将数组中的元素复制到一个新向量时,我得到了额外的 2 个零。我怎样才能得到如下输出
c++ - 是否实现了 std::copy 以使用多个线程?
我想尽快将一个向量复制到另一个向量中。
一种方法是使用std::copy
:
但是由于向量很长,我想知道该std::copy
函数是否已实现,因此它将使用多个线程。
我可以提供一个自定义逻辑来将向量分成相等的分离部分,分别复制这些项目,但我不想再次重新发明轮子。
std::copy
多线程也有效吗?
c++ - 从 initializer_list 初始化向量会产生不明确的编译错误
std::copy
如果注释掉了,则此代码编译,并且atc
初始化程序未注释。
但是,正如我所写的:
我在 Stack Overflow 上阅读了六个类似的问题,但没有一个能说明为什么这个版本不受欢迎。有什么建议么?