結構體中使用建構函式初始化
阿新 • • 發佈:2019-02-17
struct作為資料結構的實現體,它預設所有結構成員預設都是Public,而類的變數和常量數則預設為Private,不過其他類成員預設都是Public。
C++結構體的繼承預設是public,而c++類的繼承預設是private。
所以結構體中使用建構函式也是合理的。
struct Interval
{
int start;
int end;
Interval() : start(0), end(0) {}
Interval(int s, int e) : start(s), end(e) {}
};
對於這種結構體的初始化,由於Interval不是內建型別,所以在vector中對其初始化時應該有型別轉換,比如
比如你程式碼裡有一些小函式,而這些函式一般只被呼叫一次(比如函式指標),這時你就可以用lambda表示式替代他們,這樣程式碼看起來更簡潔些,用起來也方便。vector<Interval>itval = { Interval(1,3), Interval(2, 6), Interval(8, 10), Interval(15, 18) };
sort(intervals.begin(), intervals.end(), [](Interval a, Interval b) {return a.start < b.start; });
上面的sort就實現了根據Interval中start的大小對兩個Interval型別的變數進行排序。vector::end() 函式返回一個指向當前vector末尾元素的下一位置的迭代器.要訪問末尾元素,需要先將此迭代器減1。
vector::back() 函式返回當前vector最末一個元素的引用。
res.push_back(intervals[0]); for (int i = 1; i < intervals.size(); i++) { if (res.back.end() < intervals[i].start) res.push_back(intervals[i]); else res.back.end() = max(res.back().end, intervals[i].end); }