c++ 容器排序,c++容器用法
c学习笔记IX-顺序容器(II)-for freedom-博客花园
I .插入操作如何影响容器的选择:
1.list容器代表一个不连续的内存区域,允许元素一个接一个地向前和向后遍历。您可以在任何地方有效地插入或删除元素。在列表容器中插入或删除元素不需要移动任何其他元素。另一方面,列表容器不支持随机访问,访问一个元素需要遍历其他相关元素。
2.对于vector容器,在除了容器末尾之外的任何其他位置的插入(或删除)操作都需要移动插入(或删除)元素右侧的所有元素。
3.3.deque容器具有更复杂的数据结构。从队列两端插入和删除元素的速度非常快。在容器中间插入或删除会花费更多。deque容器提供了list和vector的一些属性:
A.像vector容器一样,在deque容器中间插入或删除元素是低效的。
B.与vector容器不同,deque容器在其头部提供了有效实现insert和erase的操作,就像那些在容器尾部的操作一样。
C.类似于vector容器,但不同于list容器,deque容器支持对所有元素的随机访问。
D.在deque容器的头部或尾部插入元素不会使任何迭代器失效,而删除头部或尾部的元素只会使指向被删除元素的迭代器失效。deque容器中任何其他地方的插入和删除操作都将使指向容器元素的所有迭代器失效。
二。以下是选择容器类型的一些规则:
1.如果程序需要随机访问元素,应该使用vector或deque容器。
2.如果程序必须在容器中间插入或删除元素,应该采用列表容器。
3.如果程序不在容器的中间,而是在容器的头部或尾部插入或删除元素,应该采用deque容器。
4.如果在读取输入时只需要在容器中间插入元素,然后需要随机访问元素,可以考虑在输入时将元素读入一个列表容器,然后重新排序容器使其适合顺序访问,再将排序后的列表容器复制到一个向量容器中。
5.如果程序需要随机访问,必须在容器中间插入或删除元素,该怎么办?
此时,容器的选择取决于以下两种操作的相对成本:随机访问列表容器元素的成本和在vector或deque容器中插入/删除元素时复制元素的成本。一般来说,应用程序中占主导地位的操作(程序中更多使用的是访问操作还是插入/删除操作)会决定应该是什么类型的容器。
三。如果你不能确定一个应用程序应该采用哪个容器,那么在编写代码时,尽量只使用vector和lists容器提供的操作:使用迭代器而不是下标,避免对元素的随机访问。这样,在需要的时候,程序可以很容易地从使用vector容器修改为使用list容器。
第四,再来说说弦乐:
?123456789101112131415161718192021222324252627282930313233343536373839404142434445 # include iostream # include字符串使用命名空间stdint(){/////S1为空字符串string s2(5, a );//s2==aaaaa ,初始化字符串s3(s2用5个字符A(S2);//s3最初是s2字符串s4的副本( abcde );//用字符串常量初始化S4字符串S5 (s4.begin(),S4 . begin()S4 . size()/2);//有迭代器初始化s5。注意第二个参数/////null终止的arraychar c_array[]=World中没有迭代器的字符!;//null-terminated char no _ null[]={ H , I };//非空终止字符串S6(CP);//s1==Hiyastring s7(c_array,5);//S2== World ;第一个参数代表起始位置,第二个参数代表字符串s8(c_array 5,4)的长度;//s3==!字符串S9(no _ null);//错误:运行时错误:no _ null not null终止字符串S10 (no _ null,2);//ok:S5== Hi ;第一个参数代表起始位置,第二个参数代表长度//-字符串s11(s1,2);//S6== ya ;第二个参数表示起始位置。直到字符串的结尾字符串s12(s1,0,2);//S7== Hi ;第二个参数表示起始位置。第二个参数表示字符串s13(s1,0,8)的长度;//S8== Hiya ;第二个参数表示起始位置。第二个参数代表长度。标准库最多只能复制与字符串对象长度相等的字符数。//-string str 2= fghijkl ;string:迭代器sitor=str 2 . begin();str2.insert(sitor, 8 );cout str2 endlcout Hello world!endl返回0;}1.子串操作:
S.substr(pos,n)返回string类型的字符串,该字符串包含从s中的下标pos开始的n个字符。
返回包含从下标pos到s结尾的所有字符的字符串。
S.substr()返回s的副本
2.2.string对象的追加和替换操作:
S.append( args)在s. Return s reference之后连接args
S.replace(pos,len,args)删除S中下标pos的len字符,并用args指定的字符替换它们。s返回的引用(此版本中参数不能是b2,e2)
S.replace(b,e,args)删除迭代器b和e标记的范围内的所有字符,并用args替换它们。返回了的引用。(在此版本中,args不能是s2、pos2、len2)
追加和替换操作的参数:args
s2型S2弦
字符串s2中下标pos2的S2、pos2、len2字符
由cp指针指向的空终止数组。
Cp,len2 cp指向空终止数组中的第一个len2字符。
字符c的n个副本
b2,e2迭代器B2和e2标记的范围内的所有字符
3.在搜索操作中,如果找不到相应的字符串,将返回string:npos。
4.注意字符串,搜索功能的区别,是用来查找字符串还是字符。
S.find( args)查找s中第一个出现的args。
S.rfind( args)查找s。
S.find_first_of( args)查找s中args的任何字符的第一个匹配项。
动词(verb的缩写)容器适配器:队列、优先级队列和堆栈。适配器是标准库中常见的概念,包括容器适配器、迭代器适配器和函数适配器。本质上,适配器是一种机制,它使一个事物的行为类似于另一个事物的行为。容器适配器使现有的容器类型能够以不同抽象类型的工作方式实现。例如,堆栈适配器可以使任何类型的顺序容器作为堆栈工作。
1.适配器的初始化:所有适配器都定义了两个构造函数:默认构造函数用于创建空对象,而带有容器参数的构造函数将参数容器的副本作为其基值。例如,假设deq是一个类型为deque int的容器,您可以用deq初始化一个新的堆栈,如下所示:
stack int STK(deq);//将元素从Deq复制到STK2。覆盖基本容器类型:默认堆栈和队列是基于deque容器实现的,而priority_queue是在vector容器上实现的。创建适配器时,可以通过指定一个顺序容器作为在vector之上实现的adapter://empty堆栈的第二个类型参数来覆盖其关联的基本容器类型。
堆栈字符串,向量字符串str _ stk
//str_stk2在vector的顶部实现,并保存svec的副本
堆栈字符串,向量字符串str _ STK 2(svec);3.适配器的关系运算:只要基本元素类型支持等于和小于运算符,同类型的两个适配器可以在等于、不等于、小于、大于、小于或等于中进行比较。这些关系运算是通过依次比较元素来实现的。第一对不相等的元素将决定它们之间的小于或大于关系。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。