学STL总结--

< 1 > vector(变长数组) :

头文件:  

      #include<vector>

定义:     

      vector<int> name;   vector<int> vi;   二维:vector<int> vi[i];

      vector<double> name;

      vector<char> name;

      vector<nod> name;//node 是结构体的类型

访问:

   (1):通过下标访问,直接 a[0],a[1];

   (2):通过迭代器访问,vector<int> :: iterator it;  vector<int> :: iterator it = vi.begin();

 

int main() {
	vector<int> vi;
	for(int i = 2; i < 6; i++){
		vi.push_back(i); 
	}
	for(vector<int>::iterator it = vi.begin(); it != vi.end(); it++){
		printf("%d\t",*it);
	}
	vector<int>::iterator it = vi.begin();
	for(int i = 0; i < 4; i++){
		printf("%d\t",*(it + i));
	}
	return 0;
}

 

常用函数:

(1)push_back():

  push_back(x)就是在 vector 后面添加元素x,时间复杂度为O(1);

(2)pop_back();

  pop_back()就是删除 vector 尾元素,时间复杂度为O(1);

(3)size();

  size()用来获得 vector 中元素的个数(整型),时间复杂度O(1);

(4)clear();

  clear()用来清空 vector 中所有元素,时间复杂度为O(N);

(5)insert();

  insert(it, x)用来向 vectir 的任意迭代器 it 处插入一个元素 x,时间复杂度O(N);

(6)erase();

  erase()两种用法:1)删除单个元素  2)删除一个区间内的所有元素,时间复杂度均为O(N);

    1):erase(it)即删除迭代器为 it 处的元素;

    2):erase(first, last)即删除 [first, last)内的所有元素;

< 2 > set(集合) :

头文件:  

      #include<set>

定义:     

      set<typename> name;   set<int> st;   二维:vector<int> st[i];

访问:

      只能通过迭代器访问,set<typename> :: iterator it;  set<int> :: iterator it = st.begin();

常用函数:

(1)insert();

  insert(x) 用来向 set 的容器中插入一个元素 x,时间复杂度O(logN);

(2)find();

  find(x)返回set中对应值为 x 的迭代器,时间复杂度为O(logN);

(3)erase();

  erase()两种用法:1)删除单个元素  2)删除一个区间内的所有元素,时间复杂度均为O(N);

    1):erase(it)即删除迭代器为 it 处的元素;

    2):erase(first, last)即删除 [first, last)内的所有元素;

(4)size();

  size()用来获得 set 中元素的个数(整型),时间复杂度O(1);

(4)clear();

  clear()用来清空 set 中所有元素,时间复杂度为O(N);

< 3 > string :

头文件:  

      #include<string>

定义:     

      string str;  string str = "abcd";

输入输出:

      只能使用 cin 和 cout;

访问:

   (1):通过下标访问,直接 str[0],str[1];

   (2):通过迭代器访问,string :: iterator it;  string :: iterator it = str.begin();

常用函数:

(1)operator:

  两个字符串可以直接相加;

(2)compare operator;

  两个字符串可以直接使用 > >= < <= !等比较大小,比较规则是字典序;

(3)length() / size();

  返回 string 的长度,时间复杂度O(1);

(4)clear();

  clear()用来清空所有元素,时间复杂度为O(N);

(5)insert();

  insert()两种用法:

    1):insert(pos, sting)在 pos 处插入字符串 string,时间复杂度O(N);

    2):insert(it,it2,it3)通过迭代器在 it 位置插入 待插字符串的首~尾位置的字符串;

(6)erase();

  erase()两种用法:1)删除单个元素  2)删除一个区间内的所有元素,时间复杂度均为O(N);

    1):erase(it)即删除 it 处的元素;// it 为 迭代器

    2):erase(first, last)即删除 [first, last)内的所有元素;

        erase(pos, length)删除从pos位开始的length个元素;

(7)substr()

  substr(pos,len)返回从pos号位开始,长度位 len 的子串,时间复杂度O(len);

(8)string :: npos()

  值为 - 1,作为返回失败时的值;

(9)find()

  str.find(str2),当str2是str的子串时,返回其在str中第一次出现的位置,否则返回 string::npos,时间复杂度O(N);

(10)replace()

  1):str.replace(pos,len,str2),把str从pos位开始,长度为len的的子串替换为 str2,时间复杂度O(N);

  2):str.replace(it,it2,str)把 str 迭代器的 [it,it2) 位置的子串替换为str2;

(10)reverse()

  str.reverse(first,last),逆置 s 字符串区间为 [first, last) 内的 元素;

< 4 > map :

头文件:  

      #include<map>

定义:     

      map<typename1, typename2 > name;   map<string, int> mp; 

访问:

   (1):通过下标访问;

int main() {
	map<char, int> mp;
	mp['c'] = 20;
	mp['c'] = 30;
	printf("%d\n",mp['c']);//输出 30  
	return 0;
}

   (2):通过迭代器访问,map<typename1, typename2 >  :: iterator it;   map<char, int>::iterator it = mp.begin();

int main() {
	map<char, int> mp;
	mp['m'] = 20;
	mp['r'] = 30;
	mp['a'] = 40;
	for(map<char, int>::iterator it = mp.begin(); it != mp.end(); it++){
		printf("%c %d\n",it -> first,it -> second);
	}
	/*输出
	a 40
	m 20
	r 30
	*/
	return 0;
}

 常用函数:

(1)find():

  find(x)返回键为 x 的映射的迭代器,时间复杂度为O(logN);

int main() {
	map<char, int> mp;
	mp['m'] = 20;
	mp['r'] = 30;
	mp['a'] = 40;
	map<char, int>::iterator it = mp.find('r');
	printf("%c %d\n",it -> first,it -> second);
	//	输出 
	//	r 30 
	return 0;
}

 

(1)count():

  find(x)返回 map 中 值为x 的数量,但也只能是1 或者 0;

(3)erase();

  erase()两种用法:1)删除单个元素  2)删除一个区间内的所有元素,时间复杂度均为O(N);

    1):erase(it)两种方法删除单个元素;

int main() {
	map<char, int> mp;
	mp['w'] = 30;
	mp['m'] = 20;
	mp['r'] = 30;
	mp['a'] = 40;
	mp['b'] = 30;
	//1: 
	map<char, int>::iterator it = mp.find('r');
	mp.erase(it);//删除元素的迭代器,时间复杂度O(1);
	//2: 
	mp.erase('w');//删除元素的映射的键,时间复杂度O(logN);
	for(map<char, int>::iterator it = mp.begin(); it != mp.end(); it++){
		printf("%c %d\n",it -> first,it -> second);
	}
	return 0;
}

    2):erase(first, last)即删除 [first, last)内的所有元素;

int main() {
	map<char, int> mp;
	mp['w'] = 30;
	mp['a'] = 40;
	mp['b'] = 30;
	map<char, int>::iterator it = mp.find('b');
	mp.erase(it, mp.end());
	for(map<char, int>::iterator it = mp.begin(); it != mp.end(); it++){
		printf("%c %d\n",it -> first,it -> second);
	}
	return 0;
}

(4)size();

  size()用来获得 map 中映射的对数,时间复杂度O(1); 

< 4 > queue(队列) :

头文件:  

      #include<queue>

定义:     

      queue<typename > name;   queue<int> q;  

访问:

     只能访问队首,队尾;

常用函数:

(1)push():

  push(x)将 x 进行入队,时间复杂度为O(1);

(2)front(),back();

  分别获取队首元素和队尾元素,时间复杂度为O(1);

(3)pop();

  令队首元素出队,时间复杂度O(1);

(4)empty();

  检查队列是否为空,返回true为空,返回false为非空,时间复杂度为O(1);

(5)size();

  size()用来获得 queue 内元素的个数,时间复杂度O(1); 

< 5 > priority_queue(优先队列) :

< 6 > stack(栈) :

头文件:  

      #include<stack>

定义:     

      stack<typename > name; 

访问:

     只能通过top()访问队首;

常用函数:

(1)push():

  push(x)将 x 进行入栈,时间复杂度为O(1);

(2)top();

  获取栈顶元素,时间复杂度为O(1);

(3)pop();

  弹出栈顶元素,时间复杂度O(1);

(4)empty();

  检查 stack 是否为空,返回true为空,返回false为非空,时间复杂度为O(1);

(5)size();

  size()用来获得 stack 内元素的个数,时间复杂度O(1); 

 

posted @ 2021-08-06 11:30  荣荣荣荣荣荣  阅读(52)  评论(0)    收藏  举报