C++ 進階筆記:一些庫函式……還有一些奇技淫巧
阿新 • • 發佈:2018-11-15
一、奇技淫巧
1.取帶小數的餘數
(1)“整除”取餘法
#include<iostream>
using namespace std;
void main()
{
float a = 362.75;
int b = 360;
float aMod= a - ((int)a / b)*b;
cout << aMod << endl;
}
(2)迴圈減法
#include<iostream> using namespace std; void main() { float a = 362.75; int b = 360; while (a > b) { a = a - b; } float aMod= a ; cout << aMod << endl; }
2.取靜態陣列長度
#include<iostream>
using namespace std;
void main()
{
char d[50];
cout << (sizeof(d) / sizeof(char)) << endl;
}
3.把結構體變成字串【網路程式設計傳送資料包時有用】
#include<iostream> using namespace std; struct A { int a; char b; }; void main() { char d[50]; struct A a;//建立A型別物件a //物件a的賦值 a.a = 1; a.b = 'o'; //把結構體“變成字串” memcpy(d, &a, sizeof(a)); //現在把a改掉 a.a = 2; a.b = 'B'; //把“字串”變回a【刪掉下句則不會變回“1 o”】 memcpy(&a, d, sizeof(a)); //輸出的a還是“1 o”,而不是“2 B” cout << a.a << ' ' << a.b << endl; }
注意sizeof會產生“記憶體補齊”!!!
二、一些庫函式
1.記憶體、字串處理
(1)memcpy
memcpy指的是c和c++使用的記憶體拷貝函式,memcpy函式的功能是從源src所指的記憶體地址的起始位置開始拷貝n個位元組到目標dest所指的記憶體地址的起始位置中。
函式原型
void *memcpy(void *dest, const void *src, size_t n);
功能
從源src所指的記憶體地址的起始位置開始拷貝n個位元組到目標dest所指的記憶體地址的起始位置中
所需標頭檔案
C語言:#include<string.h>
C++:#include<cstring>
返回值
函式返回指向dest的指標。
例子
#include<string.h>
#include<stdio.h>
void main()
{
char* s = "GoldenGlobalView";
char d[20];
memcpy(d,s + 12,4);//從第13個字元(V)開始複製,連續複製4個字元(View)
//memcpy(d,s+12*sizeof(char),4*sizeof(char));//也可
d[4] = '\0';
printf("%s",d);
getchar();
}
(2)memset
(3)strcpy
2.排序、交換、比較
(1)Sort函式
參考:https://www.cnblogs.com/jjzzx/p/5122381.html
Sort函式有三個引數:
(1)第一個是要排序的陣列的起始地址。
(2)第二個是結束的地址(最後一位+1的要排序的地址)
(3)第三個引數是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個引數,此時預設的排序方法是從小到大排序。
Sort函式使用模板: Sort(start,end,排序方法) 【第三個引數(排序方法)沒有則預設升序(可自定義比較函式)】
#include <iostream>//sort只在c++裡能用
#include <algorithm>
int main()
{
int A[10] = {2,1,2,3,5,4,6,3,1,4};
//std::sort(A[0], A[9]);//引數是地址,而不是int型的值!
std::sort(A, A + 10);//第二個引數是結束的地址(最後一位要排序的地址的下一地址)【第三個引數沒有則預設升序(可自定義比較函式)】
for (int i = 0; i < 10; i++)
printf("%d ", A[i]);
return 0;
}
(2)swap函式
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a ="666",b = "999";
swap(a,b);
cout<<a<<"->"<<b<<endl;
return 0;
}
(3)max、min函式
三、vector
四、socket相關