标签:.net append 简单的 blog 删除元素 适用于 article for 部分
通常没有特别的原因,用vector。
list和forward_list有额外的内存开销,如果有很多小元素,不要使用。
如果只在读取输入时需要在容器中间位置插入元素,随后需要随机访问。
1确定是否真正需要在中间位置插入,可以用vector再用sort排序;
2如必须在中间插入元素,可在输入阶段用list,完了之后拷贝到vector
insert与emplace(emplace_back、emplace_front)
emplace是直接将参数传递给元素类型的构造函数,在容器管理的内存空间中直接构造元素。
与insert相比,省去了构造临时对象,减少了内存开销。
类型别名在泛型编程中很有用。
直接容器拷贝,要求容器类型和元素类型都匹配;
用迭代器拷贝不要求,只要元素类型可以转换即可。
array,跟内置数组一样,大小也是类型的一部分。
跟其他容器不同,默认构造的array的元素都是默认初始化,跟数组一样。
但是array支持拷贝和赋值操作,不过容器类型和大小,元素类型都必须相同。
不允许将花括号列表赋值给array。
assign允许从一个不同但相容的类型赋值
assign操作不适用与array和关联容器。
swap操作不会对任何元素进行拷贝删除或插入(除array外),可以在常数时间内完成。
除string外指向容器的迭代器,指针和引用在swap之后都不会失效。仍指向swap操作之前的元素,但是已属于不同容器了。
对于array,swap会真正交换元素,所需时间与元素数目成正比。但是迭代器指针等也不会失效。
非成员版本swap在泛型编程中很重要。
只有当元素也定义了相应的比较运算符的时候,才可以使用比较运算符来比较两个容器。
向vector、string、deque插入元素(除首尾),都需要移动元素,甚至可能引起对象存储空间的重新分配。用迭代器范围插入时,迭代器不能指向本容器。
在调用front或者back(解引用begin --end)之前,确保非空。
c.front() c.baock() c[n] 都有越界风险 c.at(n)则会抛出out_of_range异常。
因为单向链表没有简单的办法来获取其前驱,所以是通过操作给定元素后面的元素来完成的。insert_after、emplace_after、erase_after。
还特意定义了首前迭代器lst.before_begin() lst.cbefore_begin()
一般insert/emplace返回第一个添加的元素的迭代器,而after版本指向最后一个插入元素的迭代器。
添加元素
vector、string:存储空间重新分配,则全部失效;未重新分配,则插入之前部分的迭代器、引用指针仍有效。
deque:首尾以外的位置,全部失效。首尾添加,迭代器会失效,引用指针不会。
list、forward:仍有效。
删除元素
list、forward:仍有效。
deque:首尾以外的位置,全部失效。删除尾元素,尾后迭代器失效;删除首元素,仍有效
vector、string:被删之前的部分仍有效。
当使用迭代器(指针、引用),最小化要求迭代器必须有效的程序片段。在循环中更新迭代器。
尾后迭代器总是会失效,不要保存
shrink_to_fit() 将分配的空间减小到与size()相同大小,仅适用于vector、string、deque
capacity() 不重新分配内存,可以保存多少元素,仅vector和string
reserve() 分配至少能容纳n个元素的内存空间,仅vector和string
resize()是改变容器中元素的数目,不会减少容器预留的内存空间
构造
如果从一个数组构造string,必须以空字符结尾,否则需要指定拷贝前n个字符。
string s(cp, n);;
string s(s1, pos,len),pos超出s1的size会报异常,len不管多大最多拷贝至string结尾。
string除了迭代器版本,还支持下标的操作
insert、erase、append、replace、assign
返回string::size_type无符号类型
将返回值用int来保存不是个好主意。
find(args) //查找s中args第一次出现的位置
rfind(args)倒查 //查找s中args最后一次出现的位置
find_first_of(args) //s中查找args任意一个字符第一次出现的位置
find_last_of(args) //s中查找args任意一个字符最后一次出现的位置
find_first_not_of(args) //s中查找第一个不在args中的字符
find_last_not_of(args) //s中查找最后一个不在args中的字符
args中可以指定开始查找的位置pos,默认为0。这个可以方便连续查找。
to_string(val)
stoi(s, p, b)
stol(s, p, b)
stoul(s, p, b)
stoll(s, p, b)
stoull(s, p, b)
stof(s, p, b)
stod(s, p, b)
stold(s, p, b)
p是size_t的指针,用来存放第一个非数值字符的下标,默认为0
b是转换的基数,默认为10
适配器是一种机制,能使某种事物的行为看起来像另外一种事物。容器、迭代器、函数都有适配器。通用操作empty、size、swap
默认情况下,stack和queue是基于deque,priority_queue是基于vector实现。
stack:只要求push_back pop_back back,除了array和forward_list都可以
queue: 要求back、push_back、front、pop_front,可以构造与list或deque之上
priority_queue:除了front、push_back、pop_back的操作还要求随机访问,可以构造于vector或deque。
s.pop()
s.push(item)
s.emplace(args)
s.top()
q.pop() 返回queue首元素或者prio的最高优先级元素
q.front() q.back() 返回首元素或者尾元素,不删除,只适用于queue
q.top() 返回最高优先级元素,但不删除
q.push(item) 在queue末尾或者prio中恰当位置创建一个元素或者由args构造一个元素
q.emplace(args)
http://blog.csdn.net/yuyanggo/article/details/48063473
标签:.net append 简单的 blog 删除元素 适用于 article for 部分
原文地址:https://www.cnblogs.com/logchen/p/9576364.html