簡體   English   中英

C++11 initializer_list 構造函數,帶有自定義向量類的頭文件和 cpp 文件

[英]C++11 initializer_list constructor with header and cpp file for custom vector class

我正在做一個學校項目,我將在其中構建一個自定義矢量類。 並且該類應該能夠以幾種不同的方式初始化向量。 我已經堅持使用向量的這個 initializer_list 初始化。

唯一允許作為元素的值是無符號整數。

標題

#include <initializer_list>
class myvec {
private:
    unsigned int *arr; //pointer to array
    std::size_t n; //size of myvec
public:
    myvec(); // Default contructor
    myvec(std::size_t size); // Creating a vec with # of element as size
    myvec(const myvec&); // Copy constructor
    myvec(const initializer_list<unsigned int>& list);

cpp

#include "myvec.h"
#include <initializer_list>

myvec::myvec() {
    arr = new unsigned int[0];
    n = 0;
}

myvec::myvec(std::size_t size) {
    arr = new unsigned int[size];
    n = size;
}

myvec::myvec(const myvec& vec) {
    arr = new unsigned int[vec.n];
    n = vec.n;
    for (int i = 0; i < vec.n; i++) {
        arr[i]=vec.arr[i];
    }
}

myvec::myvec(const std::initializer_list<unsigned int> list) {

}

我不明白應該如何編寫構造函數才能使其工作? 一直在網上找了很久沒有成功的答案。

我想從另一個 c++ 文件中調用 initializer_list 構造函數作為 test.cpp

myvec a = {1,2,3,4};

假設您按值傳遞std::initializer_list參數(並且您可以,它是輕量級的),您可以執行以下操作:

myvec(std::initializer_list<unsigned int> l) : myvec(l.size()) {
  std::copy(std::begin(l), std::end(l), arr);
}

也就是說,您使用列表的size()初始化內部數組,然后使用std::begin()std::end()對其進行迭代以復制其元素。

std::initializer_list有 3 個成員函數:

這就是你所需要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM