我可以这样做:
#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的最短方法吗?
答案 0 :(得分:2)
所有这些都等效于std::vector<int> v(size);
-创建特定大小的向量并默认初始化所有成员。您对数组和unique_ptrs所做的全部工作就是使用默认的初始化成员创建一个数组,然后将其复制到向量中-默认情况下,直接初始化数组更简单。
如果要加载到向量中,也可以这样做:
std::vector<int> v(size);
load(&v[0]);