演算法競賽入門經典 第五章知識點

2021-09-14 08:21:06 字數 3314 閱讀 6904

5.1 從c到c++

1、c++避免了c語言中long long型別輸入輸出佔位符不匹配的問題:

//c++的long long:

long

long a,b;

while

(cin>>a>>b)

cout<<

min(a,b)

<>a的意思是:從標註輸入中讀取a,返回值是乙個已經讀取了a的新流,然後從這個新流中繼續讀取b。如果流已經讀完,while迴圈將退出。

2、c++使用命名空間

使用using namespace std;就可以用cin代替std::cin,cout代替std::cout

3、c++宣告陣列時,陣列大小可以用const宣告的常數,不需要再用#define

const

int maxn =

100int a[maxn]

;

4、c++函式引數中的引用傳遞vs c函式引數中的引用傳遞

//c++的swap2函式,更加簡單

void

swap2

(int

& a,

int& b)

intmain()

//c的swap2函式,更加麻煩

void

swap2

(int

* a,

int* b)

intmain()

//string型別的輸入輸出測試

string line;

cout<<

"test 1: cin & cout"

>line;

//cin遇到空格、換行、tab等空白符就停止讀取

cout

(getline

(cin, line)

)

6、c++中的結構體

可以擁有建構函式、可以過載運算子(以使用±*/)、可以定義流輸出模式(以使用cout)

#include

using

namespace std;

struct point

//建構函式,預設值初始化,無分號};

//這裡有分號

//過載'+'運算子,為point定義加法

point operator+(

const point& a,

const point& b)

//過載輸出運算子'<<',為point定義流輸出方式

ostream&

operator

<<

(ostream& out,

const point& p)

intmain()

輸出

(1,2)

7、c++中的模板 template:寫結構體和函式時可以不拘泥於資料型別,在呼叫它們時才臨時決定資料型別。

比如vector,在使用時可以用int型別宣告vector v;也可以用double型別vector v;根據使用需要而決定。

//模板的寫法

template

<

typename t>

//有點像typedef,但完全不同

struct point };

template

<

typename t>

//每一處模板都要寫這句

point

operator+(

const point

& a,

const point

& b)

template

<

typename t>

ostream&

operator

<<

(ostream& out,

const point

& p)

intmain()

輸出

(4,6)

(4.4,6.6)

5.2 stl初步

stl = standard template library stl簡介_菜鳥教程

5.2.1 stl之 排序與檢索:

1、sort(排序)

sort函式使用總結:陣列、string、結構體

sort函式使用總結:vector、set

2、lower_bound(檢索):i = lower_bound(a, a+n, x) - a,查詢「>=x的乙個位置」

3、unique:刪除有序陣列中的重複元素

5.2.2 stl之 不定長陣列:vector

vector用法:初始化、insert、erase、新增元素、讀取元素

vector用法2

5.2.3 stl之 集合:set

set用法

5.2.4 stl之 對映:map

map用法

5.2.5 stl之 棧、佇列、優先佇列

stack、queue、priority_queue用法

5.2.6 測試stl:隨機數生成

//測試sort函式

#include

//rand()生成乙個[0, rand_max]內的均勻隨機整數,rand_max至少為32767 = 2^15-1

//rang()/rand_max*n可以得到[0, n]之間的均勻整數

#include

//srand(time(null))可以初始化「隨機數種子」

#include

//assert巨集:當表示式為真時無變化,當表示式為假時終止程式,並且給出錯誤提示

//隨機程式

void

fill_random_int

(vector<

int>

& v,

int cnt)

//測試程式

void

test_sort

(vector<

int>

& v)

//主程式

intmain()

演算法競賽入門經典第五章

例 5.1.3 週期串 fgets str,max,stdin scanf s str fgets 函式執行後,str會讀到 n 符號停下,也就是提取一行,n 也被讀進字串,因此strlen str 會比原本輸入的字串多乙個 除了一種很特殊的情況,讀入一行時,只一行並不是以 n 結束,而是以eof結...

《演算法競賽入門經典(第2版)》第五章知識點總結

5 2ducci序列 1 整型陣列轉成string void change int aa,int mm 流轉化,如果aa包含元素有 8,11,2,7那麼ssss的變化過程為 8,811,8112,81127,是乙個累積的過程。轉換成string型後放進集合 a.insert ssss 2 strin...

演算法競賽入門經典 第五章 6174

假設你有乙個各位數字互不相同的四位數,把所有數字從大到小排序後得到a,從小到大排序後得到b,然後用a b替換原來這個數,並且繼續操作。例如,從1234出發,依次可以得到4321 1234 3087,8370 378 8352,8352 2358 6174,有趣的是,7641 1467 6174,回到...