将 int 数组转换为 std::vector<int*>

Convert int array to std::vector<int*>

我正在尝试 "convert" 一个整数 C 样式数组到 std::vector<int*> 而不使用 for 循环,或者更确切地说,将所有数组项的指针插入向量中。

我目前正在通过执行以下操作来实现此目的:

for (size_t i = 0; i < 5; i++)
{
    vector.push_back(&values[i]);
}

是否可以使用 std::vector::insert()std::being/end 来实现?

std::transform is a useful algorithm in <algorithm> 用于在不隐式兼容但可以为其提供转换函数的容器之间复制值。

这是一个示例,说明如何从 std::array<int, N>

填充 std::vector<int*>
int values[5] = { 1,2,3,4,5 };
std::vector<int*> v1;

std::transform(
    std::begin(values), std::end(values),   // Copy from
    std::back_inserter(v1),                 // Copy to
    [](auto& i) {                           // Transformation function
        return &i;
    });

编辑:将 std::array<int, 5> 更改为 int[5] 以说明问题中的编辑。

注意:正如评论中指出的那样,我的以下答案错误地与 vector<int> 相关,而不是 vector<int*> 相关问题。


使用 std::copy 和 C 样式数组的解决方案:

int ar[] = {1,2,3,4,3,2,1};
std::vector<int> vec;
std::copy(ar, ar+sizeof(ar)/sizeof(ar[0]), back_inserter(vec));

下面的代码是一种相当奇特的方式来做你想做的事,但它是通用的,它不使用 for 循环 - 它只是将数组元素的指针传递给 vector构造函数:

template<class T, size_t ... Ints, size_t N>
std::vector<T*> makePtrsHelper(std::array<T,N>& arr, std::index_sequence<Ints...>) {
       return std::vector<T*>{ & std::get<Ints>(arr)... }; 
       // vector ctor taking pointers to array's elements
}

template<class T, size_t N>
std::vector<T*> makePtrs(std::array<T,N>& array) {
    return makePtrsHelper(array, std::make_index_sequence<N>{});
}

int main(){
    std::array<int,5> ar{1,2,3,4,5};
    std::vector<int*> v = makePtrs(ar);

Live demo