一、奇技淫巧
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
vector和list在命名空間std裏,需要添加聲明
using namespace std;
四、socket相關