主頁 >  其他 > [STL]容器小結+函式物件+謂詞+內建函式物件+函式物件配接器+演算法(匯總)

[STL]容器小結+函式物件+謂詞+內建函式物件+函式物件配接器+演算法(匯總)

2021-04-02 11:02:29 其他

參考資源:1 黑馬程式員
參考資源:2 《C++標準庫 - 侯捷》中的 5.2 節-容器

文章目錄

  • 1 各容器的特點總結及使用場景
  • 2 各個容器的使用場景
  • 3 函式物件
    • 3.1 函式物件的基本概念
    • 3.2 函式物件實體演示+解釋
    • 3.3 函式物件的優勢
  • 4 謂詞
    • 4.1 謂詞的基本概念
    • 4.2 一元謂詞實體使用
    • 4.2 二元謂詞實體使用
  • 5 內建函式物件
    • 5.1 內建函式的基本概念
    • 5.2 內建函式分類
  • 6 函式物件配接器
    • 6.1 函式物件配接器的基本概念
    • 6.2 bind1st 和 bind2nd系結配置器的實體使用
      • 6.2.1 bind1st和bin2nd的區別
    • 6.3 not1和not2取反配置器的實體使用
    • 6.4 ptr_func 函式指標配接器
    • 6.5 mem_fun mem_func_ref 成員函式配接器
    • 6.6函式配置器使用總結
  • 7 演算法
    • 7.1 常用遍歷演算法
    • 7.2 常用查找演算法
    • 7.3 常用排序演算法
    • 7.4 常用拷貝和替換演算法

1 各容器的特點總結及使用場景

  1. vector 頭部與中間插入和洗掉效率較低,在尾部插入和洗掉效率高,支持隨機訪問,
  2. deque 是在頭部和尾部插入和洗掉效率較高,支持隨機訪問,但效率沒有 vector 高,
  3. list 在任意位置的插入和洗掉效率都較高,但不支持隨機訪問,
  4. set 由紅黑樹實作,其內部元素依據其值自動排序,每個元素值只能出現一次,不允許重復,且插入和洗掉效率比用其他序列容器高,
  5. map 可以自動建立 Key - value 的對應,key 和 value 可以是任意你需要的型別,根據 key 快速查找記錄,

2 各個容器的使用場景

  1. 如果需要高效的隨機存取,不在乎插入和洗掉的效率,使用 vector,
  2. 如果需要大量的插入和洗掉元素,不關心隨機存取的效率,使用 list,
  3. 如果需要隨機存取,并且關心兩端資料的插入和洗掉效率,使用 deque,
  4. 如果打算存盤資料字典,并且要求方便地根據 key 找到 value,一對一的情況使用 map,一對多的情況使用 multimap,
  5. 如果打算查找一個元素是否存在于某集合中,唯一存在的情況使用 set,不唯一存在的情況使用 multiset,

3 函式物件

3.1 函式物件的基本概念

多載函式呼叫運算子的類,其物件常稱為函式物件(function object),即它們是行為類似函式的物件,也叫仿函式(functor),其實就是多載“()”運算子,使得類物件可以像函式那樣呼叫,

注意:

  1. 函式物件(仿函式)是一個類,不是一個函式,
  2. 函式物件(仿函式)多載了”() ”運算子使得它可以像函式一樣呼叫,

假定某個類有一個多載的operator(),而且多載的operator()要求獲取一個引數,我們就將這個類稱為“一元仿函式”(unary functor);相反,如果多載的operator()要求獲取兩個引數,就將這個類稱為“二元仿函式”(binary functor),

3.2 函式物件實體演示+解釋

不難看出下面代碼用了兩種方式去實作記錄函式呼叫次數,

  1. 方法一:全域變數,但是這種方式可能帶來的是1 無意間的修改2干擾了模塊化3 并發(Concurrency)的問題…等等問題
  2. 方法二:我們用函式物件 ,內部定義一個num的成員,避免的這一問題,利用了函式物件可以保存函式呼叫的狀態的特性,

補充:這邊用到的是struct 而不是 class ,并不是不能用class,只是為了方便,class和struct的區別只是在于struct默認為public

//全域變數
int num = 0;
//函式物件多載了()
struct MyPrint 
{
	MyPrint()
	{
		num = 0;
	}
	void operator()(int val)
	{
		num++;
		cout << val << endl;
	}
	int num;
};
//普通函式 用來測驗比對
void MyPrint1(int val)
{
	num++;
	cout<<val<<endl;
}

int main(void)
{
	MyPrint prin1;//常見一個實體類
	prin1(10);
	prin1(20);
	prin1(30);
	cout << prin1.num<<endl;
	cout<<"----分割線----"<<endl;
	MyPrint1(10);
	MyPrint1(20);
	MyPrint1(30);
	cout << num << endl;	
	return 0;
}

3.3 函式物件的優勢

  1. 函式物件可以像普通函式一樣呼叫,

  2. 函式物件可以像函式那樣接受引數,

  3. 函式物件 超出函式的概念 函式物件可以保存函式呼叫的狀態,

  4. 函式物件課可行內編譯,性能好,用函式指標幾乎不可能,

  5. 模板函式物件具有通用性,優勢之一,

4 謂詞

4.1 謂詞的基本概念

謂詞是指普通函式多載的operator() 回傳值是bool型別的函式物件(仿函式),如果operator接受一個引數,那么叫做一元謂詞,如果接受兩個引數,那么叫做二元謂詞,謂詞可作為一個判斷式.

4.2 一元謂詞實體使用

前提說明:

  1. find_if是一個模板函式,接受兩個資料型別:InputItearator迭代器,Predicate用于比較數值的函式或者函式物件(仿函式),查詢成功回傳對應元素的迭代器,查詢失敗回傳v.end();(最后的迭代器)
// 函式物件  
struct compare
{
	bool operator()(int val)
	{
		return val > 5;
	}
};

void  test101()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(4);
	v.push_back(7);
	v.push_back(11);
	
	vector<int>::iterator var = find_if(v.begin(), v.end(), compare());//第三個引數這邊用的是匿名函式物件
	if (var == v.end())
	{
		cout << "查詢失敗"<< endl;
	}
	else
	{
		cout << "找到了" <<"當前值:"<<*var<<endl;
	}
}

在這里插入圖片描述

4.2 二元謂詞實體使用

前提說明:sort 是排序演算法 引數一 和 引數二 通過迭代器指定排序區間,引數三可以用函式物件改變演算法策略,

struct MyCompare1
{
	bool operator()(int val, int val1)
	{
		return val > val1;
	}
};

void test111()
{
	vector<int > v;
	v.push_back(10);
	v.push_back(1);
	v.push_back(30);
	v.push_back(13);
	//利用函式物件 改變演算法策略 原本是默認從小到大
	sort(v.begin(), v.end(), MyCompare1());//匿名函式物件
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout<<*it<<endl;
	}


}

在這里插入圖片描述

寫法二,不用匿名函式物件 直接使用實體物件

struct MyCompare1
{
	bool operator()(int val, int val1)
	{
		return val > val1;
	}
};

void test111()
{
	vector<int > v;
	v.push_back(10);
	v.push_back(1);
	v.push_back(30);
	v.push_back(13);
	MyCompare1 m1;//創建實體函式物件
	//利用函式物件 改變演算法策略 原本是默認從小到大
	sort(v.begin(), v.end(), m1);//使用實體函式物件
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout<<*it<<endl;
	}
}

5 內建函式物件

5.1 內建函式的基本概念

STL內建了一些函式物件,分為:算數類函式物件,關系運算類函式物件,邏輯運算類仿函式,這些仿函式所產生的物件,用法和一般函式完全相同,當然我們還可以產生無名的臨時物件來履行函式功能,使用內建函式物件,需要引入頭檔案#include<functional>.

類名<引數型別> 實體類名;

5.2 內建函式分類

6個算數類函式物件,除了negate是一元運算,其他都是二元運算,

template<class T> T plus<T>//加法仿函式
template<class T> T minus<T>//減法仿函式
template<class T> T multiplies<T>//乘法仿函式
template<class T> T divides<T>//除法仿函式
template<class T> T modulus<T>//取模仿函式
template<class T> T negate<T>//取反仿函式

6個關系運算類函式物件,每一種都是二元運算,

template<class T> bool equal_to<T>//等于
template<class T> bool not_equal_to<T>//不等于
template<class T> bool greater<T>//大于
template<class T> bool greater_equal<T>//大于等于
template<class T> bool less<T>//小于
template<class T> bool less_equal<T>//小于等于

邏輯運算類運算函式,not為一元運算,其余為二元運算

template<class T> bool logical_and<T>//邏輯與
template<class T> bool logical_or<T>//邏輯或
template<class T> bool logical_not<T>//邏輯非

plus<int> p;//相加
int a=p(10, 20);
cout << a<<endl;

equal_to<string> e;//判斷是否等于 回傳 bool
bool e1=e("aaa", "bbb");
cout << e1<<endl;

6 函式物件配接器

6.1 函式物件配接器的基本概念

函式物件配接器是完成一些配接作業,這些作業包括系結(bind),否定(negate),以及對一般成員或成員函式的修飾,使其成為函式物件,重點掌握以下四種重要的以及三種不常用的,

6.2 bind1st 和 bind2nd系結配置器的實體使用

需求分析: 在遍歷容器的時候,我希望將容器中的值全部加上x(我們設定的增值)之后顯示出來,
在這里插入圖片描述
問題分析:從for_each的定義可以看出,第三個引數位置的函式物件每次只能傳入一個引數,如果要使用for_each去直接實作需求顯然是不可能的,
配接器作用:利用bind1st 或者bind2nd配接器將二元函式物件轉成一元函式物件( ),

class MyPrint :public binary_function<int, int, void>
{
public:
	void operator()(int a, int b) const
	{
		cout <<"和為:"<< a + b <<"    第一個值為:"<<a<<"   第二個值為:"<<b<< endl;
	}
};
void test01()
{
	vector<int> v;
	for (int i = 0; i < 5; i++)
	{
		v.push_back(i);
	}
	int x=100;
	for_each(v.begin(), v.end(), bind1st( MyPrint(),x ));
}



在這里插入圖片描述

class MyPrint :public binary_function<int, int, void>
{
public:
	void operator()(int a, int b) const
	{
		cout <<"和為:"<< a + b <<"    第一個值為:"<<a<<"   第二個值為:"<<b<< endl;
	}
};

void test01()
{
	vector<int> v;
	for (int i = 0; i < 5; i++)
	{
		v.push_back(i);
	}
	int x=100;
	for_each(v.begin(), v.end(), bind2nd( MyPrint(),x ));
}


在這里插入圖片描述

6.2.1 bind1st和bin2nd的區別

bind1st,將addnum系結為函式物件的第一個引數
bin2nd,將addnum系結為函式物件的第二個引數

6.3 not1和not2取反配置器的實體使用

not1作用:對一元函式物件取反 ,從輸出大于5的第一個值轉變成 小于5的第一個值

class MyGreater:public unary_function<int, bool>
{
public:
	bool operator()(int val)const
	{
		return val > 5;
	}

};

void test909()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(3);
	v.push_back(10);
	v.push_back(2);
	vector<int>::iterator it = find_if(v.begin(),v.end(), not1(MyGreater()));
	cout<<*it<<endl;

}

在這里插入圖片描述

not2作用:對二元函式物件取反 ,從大到小排序,設定成從小到大排序

class Compare1:public binary_function<int, int, void>
{
public:
	bool operator()(int val,int val1)const
	{
		return val > val1;
	}
};

void test111()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(78);
	v.push_back(10);
	v.push_back(2);
	sort(v.begin(),v.end(),not2(Compare1()));
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout<<(*it)<<endl;
	}

}

6.4 ptr_func 函式指標配接器

//如何給一個普通函式使用系結配接器(bind1st bind2nd)系結一個引數?(拓展)
//ptr_fun
void myprint04(int v1, int v2){
	cout << v1 + v2 << " ";
}
void test04(){
 
	vector<int> v;
	v.push_back(2);
	v.push_back(1);
	v.push_back(5);
	v.push_back(4);
 
 
	//1 將普通函式適配成函式物件
	//2 然后通過系結器系結引數
	for_each(v.begin(), v.end(), bind2nd(ptr_fun(myprint04), 100));
	cout << endl;
 
	//總結: ptr_fun 將普通函式轉變為函式物件
}

6.5 mem_fun mem_func_ref 成員函式配接器

//mem_fun mem_fun_ref
//如果我們容器中存盤的是物件或者物件指標,如果能指定某個成員函式處理成員資料,
class student{
public:
	student(string name, int age) :name(name), age(age){}
	void print(){
		cout << "name:" << name << " age:" << age << endl;;
	}
	void print2(int a){
		cout << "name:" << name << " age:" << age << " a:" << a << endl;
	}
	int age;
	string name;
};

 
void test05(){
 
	//mem_fun : 如果存盤的是物件指標,需要使用mem_fun
	vector<student*> v;
	student* s1 = new student("zhaosi", 10);
	student* s2 = new student("liuneng", 20);
	student* s3 = new student("shenyang", 30);
	student* s4 = new student("xiaobao", 40);
 
	v.push_back(s1);
	v.push_back(s2);
	v.push_back(s3);
	v.push_back(s4);
 
	for_each(v.begin(), v.end(), mem_fun(&student::print));
	cout << "-----------------------------" << endl;
 
	//mem_fun_ref : 如果容器中存盤的是物件,需要使用mem_fun_ref
 
	vector<student> v2;
	v2.push_back(student("zhaosi", 50));
	v2.push_back(student("liuneng", 60));
	v2.push_back(student("shenyang", 70));
	v2.push_back(student("xiaobao", 80));
 
	for_each(v2.begin(), v2.end(), 		mem_fun_ref(&student::print));
 
}

6.6函式配置器使用總結

  1. 需要繼承一個類 :binary_function< > 二元函式物件使用; unary_function<> 一元函式使用,例如 : public binary_function < int int bool > 前兩個表示傳入引數的型別 第三個表示回傳的型別,
  2. 需要加上const限定符 例如:bool operator(int a,int b)const
  3. operator 名稱不要寫錯,不好找,

7 演算法

這部分具體使用具體查詢,內容過多,不一一列舉,

7.1 常用遍歷演算法

for_each 和 transform用法簡單,唯一需要注意的就是利用transform把一個容器元素搬到另外一個容器,需要預先開辟空間,不能是reserve 而是使用 resize如下
Target.resize(Source.size());

/*
    遍歷演算法 遍歷容器元素
	@param beg 開始迭代器
	@param end 結束迭代器
	@param _callback  函式回呼或者函式物件
	@return 函式物件
*/
for_each(iterator beg, iterator end, _callback);
/*
	transform演算法 將指定容器區間元素搬運到另一容器中
	注意 : transform 不會給目標容器分配記憶體,所以需要我們提前分配好記憶體
	@param beg1 源容器開始迭代器
	@param end1 源容器結束迭代器
	@param beg2 目標容器開始迭代器
	@param _cakkback 回呼函式或者函式物件
	@return 回傳目標容器迭代器
*/
transform(iterator beg1, iterator end1, iterator beg2, _callbakc)


for_each:
/*

template<class _InIt,class _Fn1> inline
void for_each(_InIt _First, _InIt _Last, _Fn1 _Func)
{
	for (; _First != _Last; ++_First)
		_Func(*_First);
}

*/


//for_each 和  transform用法簡單 唯一注意的就是

7.2 常用查找演算法

/*
	find演算法 查找元素
	@param beg 容器開始迭代器
	@param end 容器結束迭代器
	@param value 查找的元素
	@return 回傳查找元素的位置
*/
find(iterator beg, iterator end, value)
/*
	find_if演算法 條件查找
	@param beg 容器開始迭代器
	@param end 容器結束迭代器
	@param  callback 回呼函式或者謂詞(回傳bool型別的函式物件)
	@return bool 查找回傳true 否則false
*/
find_if(iterator beg, iterator end, _callback);

/*
	adjacent_find演算法 查找相鄰重復元素
	@param beg 容器開始迭代器
	@param end 容器結束迭代器
	@param  _callback 回呼函式或者謂詞(回傳bool型別的函式物件)
	@return 回傳相鄰元素的第一個位置的迭代器
*/
adjacent_find(iterator beg, iterator end, _callback);
/*
	binary_search演算法 二分查找法
	注意: 在無序序列中不可用
	@param beg 容器開始迭代器
	@param end 容器結束迭代器
	@param value 查找的元素
	@return bool 查找回傳true 否則false
*/
bool binary_search(iterator beg, iterator end, value);
/*
	count演算法 統計元素出現次數
	@param beg 容器開始迭代器
	@param end 容器結束迭代器
	@param  value回呼函式或者謂詞(回傳bool型別的函式物件)
	@return int回傳元素個數
*/
count(iterator beg, iterator end, value);
/*
	count演算法 統計元素出現次數
	@param beg 容器開始迭代器
	@param end 容器結束迭代器
	@param  callback 回呼函式或者謂詞(回傳bool型別的函式物件)
	@return int回傳元素個數
*/
count_if(iterator beg, iterator end, _callback);

7.3 常用排序演算法

/*
	merge演算法 容器元素合并,并存盤到另一容器中
	@param beg1 容器1開始迭代器
	@param end1 容器1結束迭代器
	@param beg2 容器2開始迭代器
	@param end2 容器2結束迭代器
	@param dest  目標容器開始迭代器
*/
merge(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest)
/*
	sort演算法 容器元素排序
	注意:兩個容器必須是有序的
	@param beg 容器1開始迭代器
	@param end 容器1結束迭代器
	@param _callback 回呼函式或者謂詞(回傳bool型別的函式物件)
*/
sort(iterator beg, iterator end, _callback)
/*
	sort演算法 對指定范圍內的元素隨機調整次序
	@param beg 容器開始迭代器
	@param end 容器結束迭代器
*/
random_shuffle(iterator beg, iterator end)
/*
	reverse演算法 反轉指定范圍的元素
	@param beg 容器開始迭代器
	@param end 容器結束迭代器
*/
reverse(iterator beg, iterator end)

7.4 常用拷貝和替換演算法

/*
	copy演算法 將容器內指定范圍的元素拷貝到另一容器中
	@param beg 容器開始迭代器
	@param end 容器結束迭代器
	@param dest 目標起始迭代器
*/
copy(iterator beg, iterator end, iterator dest)
/*
	replace演算法 將容器內指定范圍的舊元素修改為新元素
	@param beg 容器開始迭代器
	@param end 容器結束迭代器
	@param oldvalue 舊元素
	@param oldvalue 新元素
*/
replace(iterator beg, iterator end, oldvalue, newvalue)
/*
	replace_if演算法 將容器內指定范圍滿足條件的元素替換為新元素
	@param beg 容器開始迭代器
	@param end 容器結束迭代器
	@param callback函式回呼或者謂詞(回傳Bool型別的函式物件)
	@param oldvalue 新元素
*/
replace_if(iterator beg, iterator end, _callback, newvalue)
/*
	swap演算法 互換兩個容器的元素
	@param c1容器1
	@param c2容器2
*/
swap(container c1, container c2)

學習筆記總結,如有錯誤,歡迎指出!,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/271550.html

標籤:其他

上一篇:Pulsar的Topic、Subscription和Cursors作業原理

下一篇:《初識Spark之RDD算子長文篇》一篇帶你開啟大資料計算之門!

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more