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,回到...