关于stl:C-STL-array容器

一、前言array 容器是 C++ 11 规范中新增的序列容器,就是在 C++ 一般数组的根底上,增加了一些成员函数和全局函数。在应用上,它比一般数组更平安,且效率并没有因而变差。和其它容器不同,array 容器的大小是固定的,无奈动静的扩大或膨胀,只容许拜访或者替换存储的元素。 二、详解array 容器以类模板的模式定义在 <array> 头文件,并位于命名空间 std 中。因而,在应用该容器之前,代码中需引入 <array> 头文件,并默认应用 std 命令空间。即: #include <array>using namespace std;在 array<T,N> 类模板中,T 用于指明容器中的存储的具体数据类型,N 用于指明容器的大小,N 必须是常量,不能用变量示意。 1、初始化① std::array<int, 10> values; ② std::array<int, 10> values {};③ std::array<double, 10> values {2,1,4,9};以上都能够对array进行初始化,区别在于:①各个元素的值是不确定的(array 容器不会做默认初始化操作)②将所有的元素初始化为 0 或者和默认元素类型等效的值③能够初始化一部分值,残余的均初始化值默认为0 2、成员函数成员函数性能begin()返回指向容器中第一个元素的随机拜访迭代器end()返回指向容器最初一个元素之后一个地位的随机拜访迭代器,通常和 begin() 联合应用rbegin()返回指向最初一个元素的随机拜访迭代器rend()返回指向第一个元素之前一个地位的随机拜访迭代器cbegin()和 begin() 性能雷同,只不过在其根底上减少了 const 属性,不能用于批改元素cend()和 end() 性能雷同,只不过在其根底上,减少了 const 属性,不能用于批改元素crbegin()和 rbegin() 性能雷同,只不过在其根底上,减少了 const 属性,不能用于批改元素crend()和 rend() 性能雷同,只不过在其根底上,减少了 const 属性,不能用于批改元素size()返回容器中以后元素的数量,其值始终等于初始化 array 类的第二个模板参数 Nmax_size()返回容器可包容元素的最大数量,其值始终等于初始化 array 类的第二个模板参数 Nempty()判断容器是否为空,和通过 size()==0 的判断条件性能雷同,但其效率可能更快at(n)返回容器中 n 地位处元素的援用,该函数主动查看 n 是否在无效的范畴内,如果不是则抛出 out_of_range 异样front()返回容器中第一个元素的间接援用,该函数不适用于空的 array 容器back()返回容器中最初一个元素的间接利用,该函数同样不适用于空的 array 容器。data()返回一个指向容器首个元素的指针。利用该指针,可实现复制容器中所有元素等相似性能fill(val)将 val 这个值赋值给容器中的每个元素array1.swap(array2)替换 array1 和 array2 容器中的所有元素,但前提是它们具备雷同的长度和类型3、实例1)初始化// testArray.cpp : 此文件蕴含 "main" 函数。程序执行将在此处开始并完结。//#include <iostream>#include <array>using namespace std;int main(){ std::array<int, 5> arrayInt; std::array<int, 5> arrayInt2{}; std::array<int, 5> arrayInt3{ 2,6,4,3 }; //遍历array的值 for (int i = 0; i < arrayInt.size(); i++) { std::cout << "输入arrayInt[" << i << "]=" << arrayInt[i] << std::endl; } for (int i = 0; i < arrayInt2.size(); i++) { std::cout << "输入arrayInt2[" << i << "]=" << arrayInt2[i] << std::endl; } for (int i = 0; i < arrayInt3.size(); i++) { std::cout << "输入arrayInt3[" << i << "]=" << arrayInt3[i] << std::endl;; } system("pause"); return 0;}后果如下: ...

May 6, 2021 · 2 min · jiezi

关于stl:STL专题-03-相关例题选自ACM

度度熊学队列 度度熊正在学习双端队列,他对其翻转和合并产生了很大的趣味。 初始时有 N 个空的双端队列(编号为 1 到 N ),你要反对度度熊的 Q 次操作。 ①1 u w val 在编号为 u 的队列里退出一个权值为 val 的元素。(w=0 示意加在最后面,w=1 示意加在最初面)。 ②2 u w 询问编号为 u 的队列里的某个元素并删除它。( w=0 示意询问并操作最后面的元素,w=1 示意最初面) ③3 u v w 把编号为 v 的队列“接在”编号为 u 的队列的最初面。w=0 示意程序接(队列 v 的结尾和队列 u 的结尾连在一起,队列v 的结尾作为新队列的结尾), w=1 示意逆序接(先将队列 v 翻转,再程序接在队列 u 前面)。且该操作实现后,队列 v 被清空。Input有多组数据。 对于每一组数据,第一行读入两个数 N 和 Q。 接下来有 Q 行,每行 3~4 个数,意义如上。 N≤150000,Q≤400000 1≤u,v≤N,0≤w≤1,1≤val≤100000 所有数据里 Q 的和不超过500000Output对于每组数据的每一个操作②,输入一行示意答案。 留神,如果操作②的队列是空的,就输入−1且不执行删除操作。Sample Input2 101 1 1 231 1 0 2332 1 1 1 2 1 23331 2 1 233333 1 2 12 2 02 1 12 1 02 1 1Sample Output23-1233323323333 ...

April 28, 2021 · 3 min · jiezi

关于stl:STL专题-02-相关例题选自ACM

产生冠军 有一群人,打乒乓球较量,两两捉对撕杀,每两个人之间最多打一场较量。球赛的规定如下:如果A战胜了B,B又战胜了C,而A与C之间没有进行过较量,那么就认定,A肯定能战胜C。如果A战胜了B,B又战胜了C,而且,C又战胜了A,那么A、B、C三者都不可能成为冠军。依据这个规定,无需循环较量,或者就能确定冠军。你的工作就是面对一群较量选手,在通过了若干场撕杀之后,确定是否曾经实际上产生了冠军。Input输出含有一些选手群,每群选手都以一个整数n(n<1000)结尾,后跟n对选手的比赛结果,比赛结果以一对选手名字(中距离一空格)示意,前者战败后者。如果n为0,则示意输出完结。Output对于每个选手群,若你判断出产生了冠军,则在一行中输入“Yes”,否则在一行中输入“No”。Sample Input3Alice BobSmith JohnAlice Smith5a cc dd eb ea d0Sample OutputYesNo #include<iostream>#include<algorithm>#include<string>#include<string.h>#include<cstdio>#include<queue>#include<stack> #include<set> using namespace std;//#include<bits/stdc++.h>//万能头文件 //字符翻转 int main(){ int t = 0; while(cin >> t){ if(t == 0){ break; } getchar(); string s1,s2; set<string>str1,str2; while(t--){ cin >> s1 >> s2; str1.insert(s1); str1.insert(s2); str2.insert(s2); } if(str1.size() - str2.size() == 1){ cout << "Yes" << endl; }else{ cout << "No" << endl; } } return 0;} 人见人爱A-B加入过上个月月赛的同学肯定还记得其中的一个最简略的题目,就是{A}+{B},那个题目求的是两个汇合的并集,明天咱们这个A-B求的是两个汇合的差,就是做汇合的减法运算。(当然,大家都晓得汇合的定义,就是同一个汇合中不会有两个雷同的元素,这里还是揭示大家一下) 呵呵,很简略吧?Input每组输出数据占1行,每行数据的开始是2个整数n(0<=n<=100)和m(0<=m<=100),别离示意汇合A和汇合B的元素个数,而后紧跟着n+m个元素,后面n个元素属于汇合A,其余的属于汇合B. 每个元素为不超出int范畴的整数,元素之间有一个空格隔开.如果n=0并且m=0示意输出的完结,不做解决。Output针对每组数据输入一行数据,示意A-B的后果,如果后果为空集合,则输入“NULL”,否则从小到大输入后果,为了简化问题,每个元素前面跟一个空格.Sample Input3 3 1 2 3 1 4 73 7 2 5 8 2 3 4 5 6 7 8 0 0Sample Output2 3 NULL ...

April 28, 2021 · 3 min · jiezi