C語言實現鏈表之單向鏈表(二)結點記憶體申請及資料初始化 在上一篇文章中已經給出了整體的設計架構,現在講逐一給出每一個函數的實現,為了一一講解,清晰一點,將分開介紹。 本篇文章將給出MyList_Single.c---實現檔案的第一個函數,即對鏈表中的一個結點申請記憶體並對其內部的資料進行初始化的函數。程式如下,由於是第一個函數,所以會給出整個檔案的前面部分。
1.1簡單介紹 在C語言中,不但參數的類型可變,參數的個數也是可變的.也就是說,在形參表中可以不明確指定傳遞參數的個數和類型,一個常見的庫函數Printf()就是如此.這種函數稱之為變參函數。可變長參數函數的參數數目和類型雖然是可變,但其設計原理與固定參數函數的設計原理是一致的,必須有辦法告訴變參函數沒有指定的參數的個數和類型。 1.2可變長參數函數的設計方法 在標準檔案stdarg.h中包含帶參數的宏定義
我們直入主題,下面是我今天要講解的函數列表。 /*1.尋找find系列2.插入insert系列3.提取substr4.刪除erase5.替換replace*/ 現在來看第一個:尋找函數。 /*函數名 描述find 尋找rfind 反向尋找find_first_of
標準c++中string類函數介紹 注意不是CString 之所以拋棄char*的字串而選用C++標準程式庫中的string類,是因為他和前者比較起來,不必 擔心記憶體是否足夠、字串長度等等,而且作為一個類出現,他整合的操作函數足以完成我們大多數情況下(甚至是100%)的需要。我們可以用 = 進行賦值操作,== 進行比較,+ 做串聯(是不是很簡單?)。我們盡可以把它看成是C++的基礎資料型別 (Elementary Data
string類的建構函式: string(const char *s); //用c字串s初始化 string(int n,char c); //用n個字元c初始化 此外,string類還支援預設建構函式和複製建構函式,如string s1;string s2="hello";都是正確的寫法。當構造的string太長而無法表達時會拋出length_error異常 string類的字元操作:
面試的時候我們可能會經常碰到這個問題,所以我們需要複習一下這個問題。 由於時間要求,我們不可能寫出std::string那樣的功能,我們需要能夠大體實現相關功能. #include<iostream>#include<cstdlib>using namespace std;class String{ friend ostream& operator<<(ostream& os,String& str);public:
string類在string標頭檔中,string定義在命名空間std中,若想使用string必須在開頭包含如下代碼: #include <string>using std::string; 定義和初始化string對象 有如下幾種方式: string s1; //預設初始化,s1是一個空串string s2(s1); //s2是s1的副本string s2 = s1;
這個在面試或筆試的時候常問到或考到。 已知類String的原型為: class String{public:String(const char *str = NULL);// 普通建構函式 String(const String &other);// 拷貝建構函式 ~String(void);// 解構函式 String & operator = (const String &other);// 賦值函數 private:char *m_data;/
static_assert: 這個宏用於檢測和診斷編譯時間錯誤。編譯期,這是一個與 CRT-assert(運行時宏)相反的宏。這個好東西用於檢測編譯時間程式的不變數。 這需要一個運算式可以被計算為 bool 或 string (字串)。如果這個運算式的值為 false ,那麼編譯器會出現一個包含特定字串的錯誤,同時編譯失敗。如果為 true 那麼沒有任何影響。 我們可以在以下使用 static_assert A. namespace / global scope
基本IO庫類型: istream(輸入資料流)類型, 提供輸入操作 ostream(輸出資料流)類型,提供輸出操作 cin, 一個istream對象,從標準輸入讀取資料 cout, 一個ostream對象,向標準輸出寫資料 cerr,一個ostream對象,通常用於輸出程式錯誤資訊,寫入到標準錯誤 >>: 用來從一個istream對象讀取輸入資料
C++中,模板的特化可以實現對不同的資料類型進行不同的處理: 比如我們要對int類型的資料用快速排序法進行排序 對float類型的資料用插入排序法進行排序 template<typename T>void sort(T arg[], int size) {cout << "temp speclized use" << endl;}template<> //特化void
有的時候程式中存在隱藏式轉換 比如下面這個例子 #include<iostream>using namespace std;class myComplex {private:int real; //複數的實部int image; //複數的虛部public:myComplex(int real = 0, int image = 0) {this->real = real;this->image = image;}friend bool
類型轉換符採用通用形式: operator /*重載類型*/() {/*內容*/} 對任何可作為函數的傳回型別(除了void之外),都可以進行重載 不允許轉換為數組或函數類型,轉換為指標類型以及參考型別是可以的 operator int(Small Int& ); // error:nonmemberclass SmallInt{public:int operator int(); // error: return listoperator
在前面我們提到過:當沒有使用者定義賦值操作符時,編譯器會預設產生一個進行淺型拷貝 如指標不但會賦給指向的值,還會賦給地址,這回產生問題 這個問題對引用而言,適不適用呢? #include <iostream>using namespace std;class myTestTwo {private:int value;int &ref = value; //建立value的引用public:myTestTwo(int i) {value = i;ref =
賦值操作符也可以被繼承。 基類的操作符可以被子類訪問使用 例子如下 #include <iostream>using namespace std;//操作符能否被繼承??class A {public:A& operator=(const A& obj) {cout << "the = operator called!" << endl;return *this;}};class B: public
我們可以通過檔案流來控制檔案的輸入以及輸出: fstream: 建立一個未綁定的檔案流 fstream fstrm("file.txt") 建立一個fstream,並開啟名為s的檔案 可以是字串或指標, 可以設定開啟的mode 檔案流名.open("file.txt") 開啟名未file.txt的檔案,並將檔案與fstrm綁定 檔案流名.close();
每種不同類型的模板函數,其靜態變數不共用 例子如下: template<typename T>void useOfStatic(const T& A) {static int i = 0;cout << ++i << endl;}int main()
一、rand() 函數名: rand 功 能: 隨機數發生器 用 法: int rand(void); 所在標頭檔: stdlib.h 函數說明 : &
標頭檔<cstdlib>中有一個重要的函數 rand() , 可以作為隨機數發生器。 現在現在我想產生一個隨機數, 我使用如下的程式: #include <iostream>#include <cstdlib>using namespace std;int main(){ cout << rand() << endl; return 0;} 問題來了,
上一篇實現C++本地通訊,當然這種資料轉送的方式只能局限於個人主機,如果想要實現兩不同區域網路之間的主機處理序通訊,即實現區域網路內兩個電腦之間的資料轉送,那麼就不能通過管道或者具名管道的方式來實現,這裡的區域網路通訊是通過一種叫做socket通訊端的方式來實現。