代码之家  ›  专栏  ›  技术社区  ›  KcFnMi

初始化STD::用UNIQUYYPTR矢量

  •  0
  • KcFnMi  · 技术社区  · 6 年前

    我可以这样做:

    #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是最短的方式进入STD::向量与UnQuyJ-PTR?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Chris Dodd    6 年前

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

    如果要加载到向量中,也可以这样做:

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