c++ - 什么是 raw_storage_iterator 组件在 C++ 中的用途/优势

标签 c++ performance c++11 copy-constructor assignment-operator

我正在阅读关于 raw_storage_iterator 的 TC++PL零件。使用这个组件我们可以获得性能优势,因为它避免了分配(更昂贵)并使用复制构造。在我看来,它应该用在我们可以拥有大量元素的序列/容器中,因此赋值调用的数量可能会产生很大的影响。

理论上它很清楚,在我看来这个组件对容器类型类很有用。但是我想详细了解我们应该在哪里使用这个组件(通过实际示例)来获得它的性能优势?

最佳答案

cppreference有示例代码。

您可以通过多种机制分配对齐的未初始化内存块。 Cppreferences 使用 std::get_temporary_buffer<T> 分配这样一个缓冲区。

然后您可以创建指向这些元素的指针。指针的类型有点误导,因为它不是指向有效 T 的指针。 ,而是适用于构建 T 的内存块.

std::raw_storage_iterator可以填充 T*并告诉输出到它。然后,您可以将该迭代器提供给需要传统输出迭代器的算法,事情就会顺利进行。

如果您尝试在没有 raw_storage_iterator 的情况下执行此操作,您将分配给一个非构造的 T ,这是未定义的行为。作为替代方案,您可以构造 T在输出给他们之前——但这是浪费,因为它构造了两次对象。

基本思想是允许在标准算法中以近乎完美的效率使用未初始化的输出缓冲区。除了一些严肃的代码微优化之外,您不应该使用它。

关于c++ - 什么是 raw_storage_iterator 组件在 C++ 中的用途/优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22976874/

相关文章:

c++ - 无法在 Debug模式下编译解决方案,因为缺少 MSVCR100D.dll

android - 为什么原生 Android 应用程序崩溃后会立即重新启动?

c# - 性能思路(内存中的 C# 哈希集和包含太慢)

c++ - 类模板特化中的decltype

c++ - 忽略虚假唤醒,condition_variable::wait_for

c++ - 将带有可变模板参数的成员函数传递给可变构造函数

c++ - Qt 国际化 : QT_TR_NOOP in c++ qstr() in qml

c++11 foreach 语法和自定义迭代器

java - 高效文本处理Java

java - JVM 和 GC 调整 - 无 Full GC 的理论