gpt4 book ai didi

c++ - 用 unique_ptr 初始化 std::vector

转载 作者:行者123 更新时间:2023-11-28 01:31:07 26 4
gpt4 key购买 nike

我能做到:

#include <vector>
#include <memory>
int main(int argc, char const *argv[]) {
int size = 5;
int *array = new int[size];
load(array);
std::vector<int> v(array, array+size);
delete[] array;
}

并且,对于智能搬运工,这个 (alt1):

#include <vector>
#include <memory>
int main(int argc, char const *argv[]) {
std::unique_ptr<int[]> array(new int[size]);
load(array.get());
std::vector<int> v(array.get(), array.get()+size);
}

我想知道,有了所有这些聪明之处,是否可以使用更短的 (alt2):

#include <vector>
#include <memory>
int main(int argc, char const *argv[]) {
std::unique_ptr<int[]> array(new int[size]);
load(array.get());
std::vector<int> v(array);
}

但是编译器说不:

c++ -std=gnu++14 -g -Wall -O3  -c -o main.o main.cpp
main.cpp:6:19: error: no matching constructor for initialization of 'std::vector<int>'
std::vector<int> v(array);

那么,alt1 是用 unique_ptr 初始化 std::vector 的最短方法吗?

最佳答案

所有这些都等同于std::vector<int> v(size); -- 创建特定大小的 vector 并默认初始化所有成员。您对数组和 unique_ptr 所做的一切就是创建一个具有默认初始化成员的数组,然后将该数组复制到一个 vector 中——直接默认初始化该数组更简单。

如果你想加载到 vector 中,你也可以这样做:

std::vector<int> v(size);
load(&v[0]);

关于c++ - 用 unique_ptr 初始化 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51461672/

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