1. 程式人生 > >stl結構體模板

stl結構體模板

上一篇文章我們提到了c++結構體模板的經典應用pair模板,發現功能異常強大,想必我們的小夥伴肯定已經為c++模板的奧祕所深深吸引,(哈哈!!假裝有人在看,心酸大哭

講c++結構體模板之前,現在我們預設我們同學已經對c++函式模板,類模板有所瞭解了,恩!!還是上圖講一下吧

那c++模板型別主要有3種

1.函式模板

//函式模板---使用體現:呼叫函式時傳遞的引數型別。
template<class 資料型別引數識別符號> <返回型別><函式名>(引數表) {     函式體 }

2.類模板

//類模板---使用體現:宣告類物件時 Stack<型別> s;
template<class T>
class Stack
{
 public:
  T pop();
  bool push(T e);
 private:
  StackNode<T> *p;
}
template<class T>//類模板外的 成員函式實現
T Stack<T>::pop()
{...}

3.結構體模板

//結構體模板---使用體現:宣告結構元素時 StackNode<型別> s;
template<class T>
struct StackNode
{
  struct T data;
  struct StackNode<T> *next;
};
//示例程式碼
#include<iostream>
//還是熟悉的structstudent
structstudent{
intheight;
intweigth;
};
template<typenameT>
structStack{
inttop;
intsize;
T*data;//將資料型別定義成模板,增強通用性
};
intmain()
{
//初始化一個student棧
structstudenta;
structStack<structstudent>;
   struct Stack(0,-1,&a);   //報錯 ----- 原因:下面見分曉
return0;
}

第二發:

    我們發現結構體模板pair<int,int> a(3,4); 

    而在上述程式碼中,我們定義

 struct Stack(0,-1,&a);  
//---- 報錯,原因,在c++中,結構體也有建構函式structclass沒有區別,唯一的區別是,如果沒有寫publicprivate等,
//struct預設是
公有成員
class預設是私有的

所以說下面程式碼等價

template<typenameT>
structStack{
inttop;
intsize;
T*data;//將資料型別定義成模板,增強通用性
Stack(inttop,intsize)
{
   this->top=top;
this->size=size;
}
};

-----------------------------------------分割線----------------------------------------------------------

template<typenameT>
structStack{
public:
inttop;
intsize;
T*data;//將資料型別定義成模板,增強通用性
Stack(inttop,intsize)
{   
this->top=top;
this->size=size;

}
};

而且,假如結構體沒有自定義建構函式,c++編譯器編譯時會自動加入一個無參建構函式,

同樣的,在結構體裡面也可以使用this指標,this指標在結構裡面也就代表著本結構體示例的指標(類的this,本類的物件的指標)

所以說structclass沒有區別,唯一的區別是,如果沒有寫publicprivate等,struct預設是公有成員,class預設是私有的,其他的型別

建構函式,解構函式,拷貝建構函式,繼承在結構體也可以同樣使用

繼承

//以下合法

structStack2:publicStack{
};

結果:

#include<iostream>
usingnamespacestd;
//還是熟悉的structstudent
structstudent{
intheight;
intweigth;
};
template<typenameT>
structStack{
inttop;
intsize;
T*data;//將資料型別定義成模板,增強通用性
Stack(inttop,intsize,T*s)
{
this->top=top;
this->size=size;
data=new(T);
memcpy(data,s,sizeof(s));
}
};
intmain()
{
//初始化一個student棧
structstudenta;
structStack<structstudent>s(1,2,&a);
cout<<s.size<<""<<endl;
return0;
}

之前我們定義pair的時候

 pair<int,int>a(3,4);  

現如今我們的struct Stack

初始化的時候

structStack<structstudent>s(1,2,&a);

是不是一樣的效果

有的同學說不是,好,再給你來點狠得

typedefstructStackpair_test;

定義pair_test<struct student>p(1,2,&a); 


相關推薦

stl結構模板

上一篇文章我們提到了c++結構體模板的經典應用pair模板,發現功能異常強大,想必我們的小夥伴肯定已經為c++模板的奧祕所深深吸引,(哈哈!!假裝有人在看,心酸)講c++結構體模板之前,現在我們預設我們同學已經對c++函式模板,類模板有所瞭解了,恩!!還是上圖講一下吧那c++

結構模板例子

結構體模板與類模板一樣,使用的時候注意細節: #include "stdafx.h" #include<iostream> #include<vector> using namespace std; template <typename T> struct

C++ pair的用法例項詳解(結構模板應用初探)

1 pair的應用(結構體模板)pair是將2個數據組合成一個數據,當需要這樣的需求時就可以使用pair,如stl中的map就是將key和value放在一起來儲存。另一個應用是,當一個函式需要返回2個數據的時候,可以選擇pair。標頭檔案:#include<utilit

C++結構模板

程式碼來自 演算法競賽與入門經典第二版-p105 #include<iostream> using namespace std; struct Point{ int x,y; Point(int x=0,int y=0):x(x),y(y){} }; Point ope

STL原始碼分析之pair結構

前言 前面在分析set, RB-tree都有在insert實現中出現pair, 下節分析map的時候更會經常出現pair, 所以打算在之前先對pair有個認識. pair是一個有兩個變數的結構體, 即誰都可以直接呼叫它的變數, 畢竟struct預設許可權都是public, 將兩個

vector 的輸入輸出和結構自定義排序模板(蒟蒻版)

#include<bits/stdc++.h> using namespace std; struct node { int id; }b[10]; vector<node>a; bool cmp(const node a,const node b) { retu

C++ STL之deque對結構的增加,刪除,排序的操作

****************deque的用法******************************** c.assign(beg,end)            將[beg; end)區間中的資料賦值給c。 c.assign(n,elem)         

1263 STL map和結構巢狀使用。

例題:HDU - 1263 夏天來了~~好開心啊,呵呵,好多好多水果~~ Joe經營著一個不大的水果店.他認為生存之道就是經營最受顧客歡迎的水果.現在他想要一份水果銷售情況的明細表,這樣Joe就可以很容易掌握所有水果的銷售情況了. Input 第一行正整數N(0<

stl sort()和結構結合使用

2018年11月14日 18:12:51 無線大腦袋 閱讀數:2 個人分類: acm

C++STL系列 結構運算子過載及優先佇列的使用

#include<bits/stdc++.h> using namespace std; struct node{ int x,y; bool operator <(const node b)const{ return this->x>b.x; } };

結構作為STL map的key時需要注意什麼? (某公司招聘面試試題)

        某公司招聘的面試環節, 有這樣一個題目:結構體作為STL map的key時需要注意什麼?   對於懂STL map的同學來說, 這個題目還是比較easy的, 先看程式: #include <iostream> #include <stri

關於stl::vector中儲存帶指標型別成員的結構指標

最近用到vector中儲存結構體: struct sProc { // 程序ID int pid; // 程序狀態 int stat; // 狀態為0次數 int count; char *path; sProc() { pid = -1; stat = 0; cou

線段樹模板題(結構&一維陣列)(區間最值,求和)

1099: [視訊]線段樹(元問題byscy)線性結構求極值和修改 時間限制: 1 Sec 記憶體限制: 128 MB 提交: 496 解決: 165 [提交][狀態][討論版] 題目描述 【題意】 給出N個數,兩種操作: 1、C x y:修改

使用STL去除std::vector自定義結構重複項

最近搞了一個小東西要去除一個vector中重複的項。是這樣的:我用組播搜尋裝置,得到裝置IP資訊、版本號資訊,等,但有時會接收到多個相同IP裝置的資訊,因此要過濾掉重複的IP。我使用vector儲存每臺裝置資訊,包括IP、版本號,因此需要使用結構體。另外,要對這些裝置IP進

stl set 使用結構

#include <iostream> #include <set> #include <string> using namespace std; struct p

STL set 集合裡面不能放結構麼?

肯定可以,C++的設計哲學之一就是使得程式在對待自定義型別時和內建型別必須是一致的(甚至自定義型別的支援更好)。所以,肯定是你程式的問題,如下:《C++標準程式庫》中明確指出:“只要是assignable、copyable、comparable(根據某個排序準則)的型別T,

st_vio——進程間通信接口抽象結構

sock 註釋 windows系統 out rip peer 如果 ifd end 工作忙,學習忙,但還是得隨便寫點。 st_vio,顧名思義,應該是指virtual IO,即虛擬IO。根據代碼裏的註釋,這個是一個高度抽象的進程間通信接口結構體,mysql中,如果不是用C+

Linux下C結構初始化

直觀 tro 擴展性 方式 建議 struct 初始化方式 www 寫到 原文地址在這裏: http://www.cnblogs.com/Anker/p/3545146.html 我 只把裏面的主要介紹和代碼寫到這裏了. 順序初始化   教科書上講C語言結構體初始化

在C語言結構中添加成員函數

我們 pau 打印 log print class 控制 stdio.h 語言   我們在使用C語言的結構體時,經常都是只定義幾個成員變量,而學過面向對象的人應該知道,我們定義類時,不只是定義了成員變量,還定義了成員方法,而類的結構和結構體非常的相似,所以,為什麽不想想如何

hdu1873 看病要排隊(結構優先隊列)

正整數 sel print 優先權 數值 事件 sim node sca 看病要排隊 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total