1. 程式人生 > >C++ 進階筆記:一些庫函式……還有一些奇技淫巧

C++ 進階筆記:一些庫函式……還有一些奇技淫巧

一、奇技淫巧

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相關