gpt4 book ai didi

c++ - 从类型 T 的数组初始化类型 T* 的 STL vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:57:24 24 4
gpt4 key购买 nike

如果我有一个数组,例如:

struct S {... };

S m_aArr[256];

我想用它来构造一个 vector ,例如:

std::vector<S*> m_vecS;

有没有办法做到这一点而不是遍历并推回 &m_aArr[i] ?我知道我不能使用在数组上使用 std::beginstd::end 的常规方法,因为 vector 是指针之一,而原始数组是一个的对象,所以我们不能只传入一个内存块。

最佳答案

您可以使用标准库为您进行迭代和推回:

std::transform(std::begin(m_aArr), std::end(m_aArr),
std::back_inserter(m_vecS), std::addressof<S>);

这将转换 m_aArr 中的每个元素通过应用 std::addressof<S> 对他们起作用。每个转换后的元素都是 push_back进入m_vecS通过 std::back_inserter 迭代器。

要在 C++11 之前执行此操作,您将无法访问 std::begin , std::end , 或 std::addressof , 所以它看起来更像这样:

std::transform(m_aArr, m_aArr + 256, std::back_inserter(m_vecS), boost::addressof<S>);

这使用 boost::addressof .

关于c++ - 从类型 T 的数组初始化类型 T* 的 STL vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16191662/

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