Untitled

mail@pastecode.io avatarunknown
plain_text
a month ago
18 kB
2
Indexable
Never
//
//#include<iostream>
//using namespace std;
//int main()
//{
//	int a=3; 
//	float b=1;
//	//condition
//	if(1)
//	{
//		auto x = a; // dac diem kieu dl auto la ko can qtam kieu cua x, nhung phai co gia tri khoi tao ban dau
//	}
//	else auto x=b;
//}
//


//#include<iostream>
//using namespace std;
//static int s_iStaticGlobal;
//void Foo()
//{
//	static int s_iStaticLocal;
//	cout << "Foo: called" << s_iStaticLocal++ << endl;
//}
//int main()
//{
//	cout<<"main: called" <<s_iStaticGlobal <<endl;
//	Foo();
//	Foo();
//	Foo();
//	//system("pause");
//	return 0;
//}


//#include<iostream>
//using namespace std;
//#include<time.h>
//#define regint register int
//int main()
//{
//	time_t perf = clock();
//	int maxint = 0x7fffffff;
//	int i=0;
//	for(;i<maxint;i++)
//	{
//		i*i*i*i*i;
//		i*i*i*i*i;
//		i*i*i*i*i;
//		i*i*i*i*i;
//
//	}
//	perf = (clock() - perf)/(CLOCKS_PER_SEC / 1000);
//	cout << "Total time: " << perf;
//
//	regint r_maxint = 0x7fffffff;
//	int r_i=0;
//	for(; r_i < r_maxint; r_i++)
//	{
//		
//		r_i*r_i*r_i*r_i*r_i;
//		r_i*r_i*r_i*r_i*r_i;
//		r_i*r_i*r_i*r_i*r_i;
//
//	}
//	perf = (clock() - perf)/(CLOCKS_PER_SEC / 1000);
//	cout << "Total time: " << perf;
//	return 0;
//}
//
//=> 

// Bien thanh ghi: toc do nhah, dug lg nho, thuong dung trog vong lap for de toc do nhah

//#include<iostream>
//using namespace std;
////extern int extern_value; // chay bthg, bien extern_value dc sd tu file Extern.cpp
////int extern_value;  se bao loi la da khai bao bien extern_value
//int main()
//{
//	cout << extern_value;
//	return 0;
//}

//#include<iostream>
//using namespace std;
//int const hello = 0;
//int main()
//{
//	hello = 10; // bao loi do hello la bien hang
//	cout << hello << endl; 
//	return 0;
//}

//#include<iostream>
//typedef long long ll;
//typedef int MyArr_5[5];
//ll var1;
//MyArr_5 arr;
//
//#define ll unsigned long long // tu sau thay vi dung "long long" de khai bao kdl thi co the dung "ll"
//ll var1;
//
//#define loop(i,a,n) for(int i=0;i<n;i++) // tu sau thay vi dung "for(int i=0;i<n;i++)" de khai bao kdl thi co the dung "loop(i,a,n)"
//using namespace std;
//int main()
//{
//	
//
//}


//#include<iostream>
//using namespace std;
//int main()
//{
//	int b[4] ={1,2,3,4};
//	cout << b[10000000]<<endl; // bao loi do co the da di ra khoi vung nho duoc cap phat cho ctrinh cua mk
//}

//#include<iostream>
//using namespace std;
//int main()
//
//{
//	int a[4] = {1,2,3,4};
//	int b[20] = {1};
//	int c[] ={1,2,3,4};
//	int d[20] = { 1,2,3};
//	int e[4];
//	for(int i=0;i<20;i++) cout << b[i] <<" " ;
//	cout << endl;
//	for(int i=0;i<20;i++) cout << d[i] <<" " ;
//	cout << endl << sizeof(a) <<endl;
//	
//	for(int i=0;i<4;i++) cout << e[i] <<" " ;
//}

//#include<iostream>
//using namespace std;
//int main()
//{
//	int a[3][2] = 
//	{
//		{1,2},
//		{3,4},
//		{5,6}
//	};
//	int b[3][2] = {1,2,3,4,5,6}; // 2 cach khai bao la nhu nhau
//}


// con tro la 1 kieu dl, dunng de luu dia chi cua 1 bien
// toan tu "&" dung de lay dia chi cua 1 bien , vi du gan gia tri cho bien con tro:
//#include<iostream>
//using namespace std;
//int main()
//{
//	int i=0; 
//	int *p = &i; // ctro p luu dia chi cua bien i
//	cout << i << " " << p << " " << *p << " " << &p;   // *p la lay gtri dc luu boi con tro p,  &p la dia chi con tro p
//	int **p1 = &p; // kbao con tro p1 tro den con tro p
//	int ***p2 = &p1;  // kbao con tro p2 tro den con tro p1
//	return 0;
//}

//#include<iostream>
//using namespace std;
//int main()
//{
//	int i = 0x3f20cc01;
//	char *p = (char*)&i;
//	short *p1 = (short*)&i;
//	int *p2 = (int*)&i;
//	long long *p3 = (long long *)&i;
//	cout << hex << *p << " " << *p1 << " " << *p2 << " " << *p3 ;
//	// kq la "...(1 ki tu char).. cc01 3f20cc01" bo nho luu theo kieu little endian : byte thap luu o dia chi thap, byte cao luu o dia chi cao
//	// khi ep kieu nhu tren thi con tro deu tro vao o nho (byte) dau tien, nhung do moi kieu co dug lg khac nhau nen co the luu dc khac nhau : char 1 byte dau (byte co dia chi thap nhat) int luu 4 byte dau, , short 2 byte dau
//	cout << endl << sizeof(p3);  // kq ra 4 do ban visual nay dang sd win32 bit ( tuc 8 byte )
//	// kich thc con tro la nhu nhau voi tung may he dieu hanh, ko phu thuoc vao kieu dl kem con tro
//	// kieu dl cua con tro the hien kich thc vung nho ma no quan ly ( vd con tro kieu char quan ly vung nho 1 byte, short 2 byte )
//	return 0;
//}


//#include<iostream>
//using namespace std;
//int main()
//{
//	char a[6] = { 10,20,30,40,50,60};
//	char *p = a;
//	cout << &p << " " << &p + 1 << endl;
//	cout << &a << " " << &a +1 << endl; // thay cong 6 byte = sizeof cua mang a
//
//	//cout << &a << endl;
//	//cout << a << endl;
//	//cout << a++;  // WRONG do a la bien mang, k co toan tu ++
//
//}


///#include<iostream>
//using namespace std;
//int main()
//{
//	// constant poiter : dia chi cua vung nho dc luu la hang so, gia tri tren vungf nho do co the thay doi
//	char char_A = 'A';
//	char char_B = 'B';
//	char *const myPtr = &char_A;
//	myPtr = &char_A; //  Error
//}



//Cap phat dong: 
// int a =10;
// int array[1000];
// CAP PHAT DONG 
//const int s=0x7fffffff;
//int a[s]; // error, k cap phat du bo nho
//int *p = new int[s];
//int *p2 = &s;
//int **row = new int *[s];
//for(int i=0; i < s; i++){
//
//	row[i]=new int[s];
//}
//for(int i=0; i < s; i++){
//
//	delete[] row[i]; //trong C++ thi cap phat dong nhu nao, xoa nhu v
//}


//bien ma khoi tao tinh thi luu trog stack, khoi ta dong thi luu trog heap

//#include<iostream>
//using namespace std;
//int main()
//{
	//char a[3] = {1,2,3};
	//cout << a << " " << &a << " " << *a << endl;

	////int *p = new int[3]; // cap phat dong 
	////p[0] = 1; p[1]=2; p[2]=3; // gan phan tu sau cap phat dong
	////cout << p << " " << &p << *p << endl;

	//int *p = new int[3];
 //   p[0] = 1; p[1] = 2; p[2] = 3;
 //   printf ("0x%x 0x%x %d\n", p, &p, *p);


	//int *p2 = (int*)a;
 //   printf("value of p2 = 0x%x\n", *p2); 
	//
	//return 0;


	//char a[3] = {1, 2, 3};
 //   printf ("0x%x 0x%x %d\n", a, &a, *a);

 //   int *p = new int[3];
 //   p[0] = 1; p[1] = 2; p[2] = 3;
 //   printf ("0x%x 0x%x %d\n", p, &p, *p);

 //   int *p2 = (int*)a;
 //   printf("value of p2 = 0x%x\n", *p2); 
	//return 0;

	
	/* KQ:
	0x14fd64 0x14fd64 1
0x591398 0x14fd60 1
Value of p2 = 0xcc030201 // do con tro p2 kieu int, muon gan on tro a vao ma a dang kieu char nen can ep kieu
// con tro p2 4 byte => tro vao o nho dau cua mang a chua gia tri "1" , quan ly 4 byte gom 3 byte cua mang a va 1 byte lan can, luu kieu little endian 
// nen kq se la cc030201

	*/

//}


/*
char a[3] = {' 1 ', ' 2 ', ' 3 '};

char *p = new char[3];
p[0] = ' 10 '; p[1] = ' 20 '; p[2] = ' 30 ';

printf ("a   = 0x%x     p = 0x%x\n", a, p);
printf ("a+1 = 0x%x   p+1 = 0x%x\n", a+1, p+1);
printf ("&a  = 0x%x    &p = 0x%x\n", &a, &p);
printf ("&a+1= 0x%x  &p+1 = 0x%x\n", &a+1, &p+1);

KQ: 
a   = 0x26FE6C        p = 0x0E1AF0
a+1 = 0x26FE6D      p+1 = 0x0E1AF1
&a  = 0x26FE6C       &p = 0x26FE70  //&p ra nhu v la do con tro p  dc khoi tao tinh, dc luu o vung nho stack
&a+1= 0x26FE6F     &p+1 = 0x26FE74  

*/


/*
#include<iostream>
using namespace std;
int main()
{
	char a[4] = {1,1,1,1};
	int *p = (int*)a;
	cout << *p << endl;
	return 0;
	//KQ;16843009 do ...
}
*/

//bien ENUM:
//dung de tao ra ten bien goi nho hon
//	Vi du:
/*
#define SPRING      0
#define SUMMER      1
#define FALL        2
#define WINTER      3
enum {SPRING, SUMMER, FALL, WINTER}; 
*/


//#include<iostream>
//using namespace std;
//enum MyEnum {SPRING, SUMMER, FALL, WINTER}; 
//// neu kbao nhu tren ma k khoi tao gtri thi MyEnum::SPRING =0, SUMMER=1, FALL=2; WINTER =3;
//// Neu khoi tao thi chi nen khoi tao cho gtri dau, cac gia tri lien sau se tang dan 
//
//enum MyEmum x;  // C style
//MyEnum y;       // C++ style
//int main()
//{
//    y = MyEnum::SPRING;
//	printf("%d", y);
//
//    y = FALL; 
//	cout << y;
//  //  y = 1;   // Loi vi bien y thuoc kieu enum nen chi gan gtri dc la 1 trog 4 casi SPRING,...,WINTER
//	return 0;
//}



/*

kieu dl UNION:
VI DU: 
union MyUnion
{
	int iValue; 
	char cValue;
	char aValue;
}
Dac diem cua union la se chi cap phat vung nho cho thang thuoc tinh lon nhat (o day 2 char 1 int => lon nhat la int vs 4 byte )
=> union cap 4 byte, va ca 3 bien iValue, cValue va aValue dung chung tren 4 byte do, neu thay doi gtri tren byte thi se thay doi cac bien co sd byte do
=> sizeof() cua union se la size thang lon nhat

union MyUnion
{
    int iValue;
    char cValue;
    char aValue[4];
};
int main()
{
    MyUnion mine = {0x01020304};
    printf("iValue: 0x%x\n", mine.iValue);
    printf("iValue: 0x%x\n", mine.cValue);
    printf("iValue: 0x%x 0x%x 0x%x 0x%x\n", 
        mine.aValue[0],
        mine.aValue[1],
        mine.aValue[2],
        mine.aValue[3]);
}

*/


/*
STRUCT :
KBAO :
c1: struct <ten> { cac thuoc tinh };
struct MyStruct
{
	int val1;
	char val2;
	char val3[5];
};
MyStruct myStruct;
int main()
{
	myStruct.val1 = 10;
	myStruct.val2 = 100;
	myStruct.val3[0] = 1000;
}


c2: dung typedef struct <ten cu>
{ 
	cac thuoc tinh 
}  <ten moi>

*/
/*
//struct co hien tuong alignment gay ra sai khac ve kich thc vung nho cho struct trc va sau comblie 
==> khi viet struct thi cac thuoc tinh cung kieu dl nen de lien tiep nhau


struct MyStruct 
{
	int va1;
	char va2;
	char var3;
}
int main()
{
	MyStruct st1;
	cout << sizeof(st1) << endl;
}

*/
/*
#include<iostream>
using namespace std;
struct MyStruct 
{
	char va1;
	short va2;
	int va4;
	char var3;

}
int main()
{
	MyStruct st1;
	cout << sizeof(st1) << endl;
}
// voi moi kieu thu tu cac thuoc tinh cua struct thi cho ra kich thc bien st1 khac nhau: vi du int short char char hoac char char short int thi ra 8 byte
// cach sap xep khac ra so byte khac
*/

//chi trog C++ thi struct moi co thuoc tinh la ham, C thi ko co
// trog struct chi nen neu ra cac thuoc tinh, chi tiet ham nen viet ngoai
//vung nho cua struct chi quan ly cac bien, cac function do ctrinh chinh quan ly. Nen viet function thoai mai ma k lam tang sizeof cua struct

/*
FUNCTION:
Xep chong ham ( Function overloading): cung ten, cung kieu tra ve nhung khac tham so. Neu kieu tra ve khac nhau ma ten giong nhau => bao loi do kbiet goi den ham nao
void Todo(int a)
{}

void Todo(int a, int b)
{}

*/ 

HET DONG 460 FILE Project notebook

//#include <iostream>
//
//using namespace std;
//
//#define loop(i, a, n) for(int i = a; i < n; i++)
//bool increase(int left
//
//
//void selection_sort(int *arr, int n) {
//    loop(i, 0, n-1) {
//        int minn = i;
//        loop(j, i+1, n)
//            if(arr[minn] > arr[j]) 
//		minn = j;
//        swap(arr[minn], arr[i]);
//    }
//}
//
//int main() {
//    int arr[] = {2, 4, 1, 5, 4};
//    selection_sort(arr, 5);
//    loop(i, 0, 5) cout << arr[i] << " ";
//    return 0;
//}
//				}
//		


TINH FLEX CUA CON TRO HAM :
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

bool ascending(int left, int right)
{
	return left > right;
}

bool descending(int left, int right)
{
	return left < right;
}

void selectionSort(int *arr, int length, bool(*p_compare)(int, int)) // truyen con tro ham vao ham selectionSort
{
	for (int i_start = 0; i_start < length; i_start++)
	{
		int minIndex = i_start;

		for (int i_current = i_start + 1; i_current < length; i_current++)
		{
			if (p_compare(arr[minIndex], arr[i_current]))
			{
				minIndex = i_current;
			}
		}

		swap(arr[i_start], arr[minIndex]); // std::swap
	}
}

int foo() {
	return 0;
}

bool compare(int a, int b) {
	return a > b;
}

int main() {
	int arr[] = { 0,4,5,6,7,2,8 };
	int isAce;
	cin >> isAce;

	if(isAce) //isAce khac 0 thi sap xep tang, bang 0 thi sap xep giam
		selectionSort(arr, 7, ascending);
	else 
		selectionSort(arr, 7, descending);
	
	for (int i = 0; i < 7; i++)
		cout << arr[i] << " ";
	//int(*p_foo)();
	//bool(*p_comp)(int, int) = compare;

	//cout << p_comp(1, 2) << "  " << compare(1,2);
	//
	return 0;
}


INLINE FUNCTION
- Viet nhieu ham thi se tiện nhưng đánh đổi là tgian, do mỗi lần ctrinh chạy đến lệnh gọi hàm thì con trỏ cần nhảy tới vùng nhớ chứa hàm để thực thi, k nhah bằng việc hàm đó được viết trực tiếp ở main.
- Hàm inline nôm na kiểu nó bê y nguyên hàm về ngay sau câu lệnh gọi hàm nên sẽ nhah hơn
- Chỉ nên dùng vs hàm k dài lắm
NAMESPACE:

HƯỚNG ĐỐI TƯỢNG:
//file main.cpp
#include"MyCar.h"

int main(){
	MyCar* Car = new MyCar ("xe 1","camry", "1",100,4 );
	Car->PrintInfo();
	return 0;
}

//file PrintInfo.cpp
#include "MyCar.h"
void MyCar::PrintInfo()
{
  cout << "Name: " << m_name << endl;
  cout << "Brand: " << m_brand << endl;
  cout << "Type: " << m_type << endl;
  cout << "Maxspeed: " << m_maxSpeed << endl;
  cout << "Number of seats: " << m_numOfSeats <<  endl;
}

//file MyCar.h
#pragma once
#include<iostream>
#include<string>
using namespace std;
class MyCar
{
public:
	MyCar(string name, string brand, string type, int maxSpeed, int numOfSeats){
		m_name = name;
		m_brand = brand;
		m_type = type;
		m_maxSpeed = maxSpeed;
		m_numOfSeats = numOfSeats;
	}
	void PrintInfo();
private:
	std::string m_name;
	std::string m_brand;
	std::string m_type;
	int         m_maxSpeed;
	int         m_numOfSeats;
};



BIỂU ĐỒ LỚP :


int gVar1 = 10; // luu o vung nho data segment do la bien toan cuc da khoi tao gtri
int gVar2; //luu o vung bss segment do la bien toan cuc chua dc khoi tao gtri

class ClassName {
    int mField;
} gObj;  ///gObj luu o vung nho bss 

int main() {
    int var1;  // dc luu o vung nho stack . DO VAO HAM MAIN thi luu o stack
    int* var2 = new int [1000];    // var2 cx o vung nho stack, con vung nho dc sinh boi ctro var2 moi dc luu o heap
    ClassName obj1;    //stack
    ClassName* obj2 = new ClassName();
    return 0;
}

VI DU  VUNG NHO:
#include<iostream>
using namespace std;
bool Kethon(string name) // luu o stack frame 2
{
	if(name="Kuu") // cac ham if , for ... mo ra 1 block moi ( 1 cap dau pvi ) thi se luu o 1 stack frame moi
	{
		return 1; //return 0; // luu o stack fr3 -> return value
		int b=10;  // luu o stack fr3 -> local variable
	}
	return 0; // luu o stack fr2 -> return value
}
int gVar1 = 10; // luu o vung nho data segment do la bien toan cuc da khoi tao gtri
int gVar2; // luu o vung nho bss segment do la bien toan cuc chua khoi tao gtri
int main() //luu o stack frame 1
{
	int a=10; 
	char *p = new char;
	bool res = Kethon("Kuu");
	return 1;
}

//VI TRI CAC BIEN DC LUU TRONG BO NHO: 
/*
 gVar1 luu o vung nho data segment do la bien toan cuc da khoi tao gtri
 gVar2 luu o vung nho bss segment do la bien toan cuc chua khoi tao gtri
 ham main luu o stack frame 1
 bien a, res va con tro p trog ham main luu o stack -> stack frame1 -> local variables
 return 1 trog ham main thi luu o stack fr1 -> return value


*/

VUNG NHO STACK: ...
VUNG NHO HEAP:
kich thc lon, dc cap phat dong,  chi co the truy cap thong qa con tro, vẫn tồn tại cho đến khi đc hủy

- Stack nhanh hơn heap do : 1. kích thc của stack nho hon heap nen viec duyet het stack sẽ nhah hơn heap. 2. ở stack thì các ô nhớ đc cấp phát liên tục, còn heap thì lúc cấp phát nó cần duyệt xem chỗ nào còn trống để cấp phát nên sẽ mất tgian truy cập hơn
CHÚ Ý: memory layout - brain storm
Nên kbao theo kiểu Class *object = new ClassName();
thay vì ClassName object;
Lý do: class thì có thể có nhiều dữ liệu nên sẽ chiếm nhiều bộ nhớ, nếu khai báo dạng 2 thì cái class mag tên object sẽ đc lưu ở stack, mà stack thì vùng nhớ hạn chế nên dễ bị tràn bộ nhớ stack. CÒn cách 1 thì chỉ lưu con trỏ object ở stack, còn vùng nhớ đc khơi tạo sẽ lưu vào heap và quản lý bới con trỏ

MEMORY LEAK: rất qtrong trog C++
Khi cấp phát động có khởi tạo mà k có delete, thì sẽ dẫn đến bộ nhớ bị tăng liên tục 

Ví dụ: Memory leak - example 3: leak thứ 2 là sẽ gây mất dấu con trỏ, mk k biết nó trỏ về đâu để kiểm soát

Ví dụ: Memory leak- example 5: ở đây khai báo con trỏ A kiểu class, nó sẽ trỏ tới 1 vùng nhớ trog heap ( vùng đỏ đỏ trên hình ). Nhưng sau ta lại gán nó vs 1 cái khác ( ở đây là NULL ) thì tức trỏ nó tới vùng nhớ khác, trog khi đó vùng nhớ đỏ trc đó vẫn chưa đc delete đi => mất dấu vùng nhớ đỏ đó ( do con trỏ A k còn qly đc nó nữa ) => memory leak


TIẾN TRÌNH:(process)  đại khái như dòng sông, nơi mà CPU qa đó đẩy ctrinh mk code (như 1 thuyền) đi. Thuyền lớn thì cần nhiều cpu. 
Luồng (Thread) cấu tạo nên tiến trình
- CPU xử lý đa luồng: nó xly cho luồng này 1 ít r qa xly các luồng khác, r lại trở lại xly tiếp luồng đó chư kp liên tục hết luồng này đến luồg khác
- 
- vấn đề khi dùng thread: khi truy nhập 1 tài nguyên dùg chug, nếu nhiều thread cùng sd 1 lúc có thể gây sai cho tài nguyên đó
=> mutex: như kiểu khi 1 thằng thread truy nhập vào tài nguyên thì nó khóa trái cửa,k cho thread khác vào. dùng xog lại mở và ra.