C++笔记 容器基础拾遗

容器的关系运算符

简单例子

vector<int> v1={1,3,5,7,9,12};
vector<int> v2={1,3,9};
vector<int> v3={1,3,5,7};
vector<int> v4={1,3,5,7,9,12};

v1<v2 //v1和v2前两个元素相当但v1[2]<v2[2] 所以v1<v2
v3<v1//v3是v1的前缀子序列,但v3长度小于v1,所以v3小
v1==v4//两者完全相同
v1!=v2;

resize的用法

resize用来改变容器的大小,resize不支持resize。顺序容器优先对容器的末尾进行操作。

//list泛指顺序容器
list<int> ilist(10,42); // 10个值为42的int;
ilist.resize(15);//在末尾添加5个0
list.resize(25-1)//在末尾添加10个-1(原有的值不发生变化)
list.resize(5)//删除后20个元素

容器的操作可能会使得迭代器失效

不同容器的不同操作对迭代器有不同的效果。

vector /stringdequelist/forward_list
添加若存储空间重新分配,则指向容器的迭代器,指针和引用失效。否则仍有效.在首尾之外添加元素会导致迭代器,指针引用均失效。否则只有迭代器失效迭代器,指针,引用仍有效。(因为是链式结构)
删除指向删除位置之前的迭代器,指针,引用仍有效。(尾后迭代器总是失效)在首尾之外的位置进行删除操作,会使所有迭代器,指针引用均失效。 删除首尾元素,则非删除位置的不失效。指向非删除位置的迭代器,指针,引用仍有效

容器的容量

vetcor将元素连续存储,为了支持快速随机访问。所以vector添加新元素时会分配比需求空间更大的内存空间作为备用。所以vector每次分配内存空间时都要移动所有的元素。(但还是比list和deque快。)

管理容量的成员函数

capacity和reserve不适用于deque.

c.shrink_to_fit();  将capacity减少到和size()相同
c.capacity();  不重新分配内存空间,c可以保存多少元素。
c.reserve(n);  分配n个元素的内存空间(但不实际添加元素)。
			   只有当前内存小于n个元素的内存的时候才会起作用

reserve只能增加容器的内存空间,不改变元素数量,不能减少容器的内存空间。
resize只改变元素数量,但不改变容量,所以也不能减少容器的内存空间

capacity表示当前内存空间能保存多少元素。
size表示已保存了多少元素。

string 额外操作

除了顺序容器通用的操作,string提供一些额外的操作.

1.构造

string s(cp,n); cp是字符数组 n是指前n个字符的拷贝
string s(s2,pos2); stirng.s2从下标pos2开始的拷贝。pos2<s2.size();
stirng s(s2,pos2,len2);stirng.s2从下标pos2开始长度为len的拷贝。pos2<s2.size(),且至多拷贝size-pos2个字符

2.分割

string("hello world");
s.substr(0,5);  hello
s.substr(6);  world
s.substr(6,11);  world
s.substr(12);  out_of_range异常

3.修改

string的insert和erase可接受下标
s.insert(pos,5,'!')    在s[pos]*之前*添加五个感叹号
s.erase(s.size()-5,5);    删除最后五个字符

insert和assign可接受c风格字符数组
const char*cp="Stately,plump BUCK";
s.assign(cp,7); s赋值cp的前七个字符
s.insert(s,size(),cp+7); 将前七个字符插入s[size]之前

append和replace string定义的两个额外成员函数
s.insert(s.size(),"world");
s.append("world");        两者等价

s.erase(11,3);
s.insert(11,"5th");11开始删除三个字符并插入5th
等价于
s.replace(11,3,"5th");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值