gpt4 book ai didi

arrays - 来自指针的 std::array 或 std::vector

转载 作者:行者123 更新时间:2023-12-02 04:16:07 25 4
gpt4 key购买 nike

我在 C++/CLI 数组中有一个数据数组,我可以使用 pin_ptr<T> 将其传递给 native 函数,目前没问题。但是,现在我需要将数组传递给 C++/STL 函数,该函数需要一个容器,例如 std::array。或 std::vector .

这样做的简单方法(我首先做的)是逐个元素地复制。

第二简单的方法是调用 std::copy() ,请看这个问题的答案:convert System::array to std::vector .

但是,我想跳过整个复制步骤,而只使用指针。视为 std::array需要一个模板参数来确定它的长度,我不能在运行时创建一个(但如果我错了请纠正我)。有没有一种方法可以创建矢量或不同类型的 STL 容器,而无需复制不必要的数据?

最佳答案

不,没有复制是不可能的,无论如何都不能使用标准容器。

如果您仍然可以复制,那么您应该查看 std::vector constructor因为我认为最简单的方法是做例如

std::vector<T>(your_pointer, your_pointer + number_of_elements)

如果您确实想避免复制,那么围绕指针编写一个简单的包装器并没有那么难,包括迭代所需的简单迭代器(我猜它必须是标准容器的原因)。


只是为了好玩,因为我有一些时间,所以我创建了这样一个包装器。它包括索引和迭代器。没有边界检查。

参见 https://gist.github.com/pileon/c21cfba496e6c352dd81

使用它的示例程序:

#include <iostream>
#include "pointer_container.h"

int main()
{
int a[20];
std::iota(a, a + 20, 0); // Initialize array

{
std::cout << "From array : ";
for (const auto item : a)
{
std::cout << item << ' ';
}
std::cout << '\n';
}

pointer_container<int> c(a, 20);
{
std::cout << "From container: ";
for (const auto item : c)
{
std::cout << item << ' ';
}
std::cout << '\n';
}
}

程序的预期输出:

From array    : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 From container: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 

关于arrays - 来自指针的 std::array 或 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33654056/

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