1. 程式人生 > >結構體中使用建構函式初始化

結構體中使用建構函式初始化

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中對其初始化時應該有型別轉換,比如
vector<Interval>itval = { Interval(1,3), Interval(2, 6), Interval(8, 10), Interval(15, 18) };
比如你程式碼裡有一些小函式,而這些函式一般只被呼叫一次(比如函式指標),這時你就可以用lambda表示式替代他們,這樣程式碼看起來更簡潔些,用起來也方便。
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);
}