string支持的容器操作

除了已经使用过的操作外,string 类型还支持大多数顺序容器操作。在某些方面,可将 string 类型视为字符容器。除了一些特殊操作,string 类型提供与 vector 容器相同的操作。string 类型与 vector 容器不同的是,它不支持以栈方式操纵容器:在 string 类型中不能使用 frontback pop_back 操作

 

一、容器的自增长capacityreserve成员函数

vector 类提供了两个成员函数(同样适用于string类型)capacity  reserve 使程序员可与 vector 容器内存分配的实现部分交互工作。capacity 操作获取在容器需要分配更多的存储空间之前能够存储的元素总数,而 reserve 操作则告诉容器应该预留多少个元素的存储空间。

弄清楚容器的 capacity(容量)与 size(长度)的区别非常重要。size 指容器当前拥有的元素个数;而 capacity 则指容器在必须分配新存储空间之前可以存储的元素总数。

代码说明如下:

int main()
{
    string p("1");
    cout<<p.size()<<endl;//当前拥有元素个数
    cout<<p.capacity()<<endl;//存储之前容器大小
    p.reserve(100);//预留容器储存空间
    cout<<p.capacity()<<endl;
    return 0;
}

二、顺序容器的赋值操作

c1 = c2

删除容器 c1 的所有元素,然后将 c2 的元素复制给 c1c1  c2 的类型(包括容器类型和元素类型)必须相同

c1.swap(c2)

交换内容:调用完该函数后,c1 中存放的是 c2 原来的元素,c2 中存放的则是 c1 原来的元素。c1  c2 的类型必须相同。该函数的执行速度通常要比将 c2 复制到 c1 的操作快

c.assign(b,e)

重新设置 c 的元素:将迭代器 b  e 标记的范围内所有的元素复制到 c中。b  e 必须不是指向 c 中元素的迭代器

c.assign(n,t)

将容器 c 重新设置为存储 n 个值为 t 的元素

assign 操作首先删除容器中所有的元素,然后将其参数所指定的新元素插入到该容器中。与复制容器元素的构造函数一样,如果两个容器类型相同,其元素类型也相同,就可以使用赋值操作符(=)将一个容器赋值给另一个容器。如果在不同(或相同)类型的容器内,元素类型不相同但是相互兼容,则其赋值运算必须使用 assign 函数。带有一对迭代器参数的 assign 操作允许我们将一个容器的元素赋给另一个不同类型的容器。

swap 操作实现交换两个容器内所有元素的功能。要交换的容器的类型必须匹配:操作数必须是相同类型的容器,而且所存储的元素类型也必须相同。调用了 swap 函数后,右操作数原来存储的元素被存放在左操作数中,反之亦然。关于 swap 的一个重要问题在于:该操作不会删除或插入任何元素,而且保证在常量时间内实现交换。由于容器内没有移动任何元素,因此迭代器不会失效。

代码如下:

#include <iostream>
#include<string>
#include<cctype>

using namespace std;

int main()
{
    string p("123456"),p1("789101213");
    string::iterator iter=p.begin(); //迭代器
    p.swap(p1);//交换容器元素
    cout<<p<<endl<<p1<<endl;
    p.assign(p1.begin(),p1.end());//复制p1到p
    cout<<p<<endl;
    cout<<*iter<<endl;//查看迭代器指向元素
    return 0;
}

三、删除元素操作

c.erase(p)

删除迭代器 p 所指向的元素返回一个迭代器,它指向被删除元素后面的元素。如果 p 指向容器内的最后一个元素,则返回的迭代器指向容器的超出末端的下一位置。如果 p 本身就是指向超出末端的下一位置的迭代器,则该函数未定义

c.erase(b,e)

删除迭代器 b  e 所标记的范围内所有的元素返回一个迭代器,它指向被删除元素段后面的元素。如果 e 本身就是指向超出末端的下一位置的迭代器,则返回的迭代器也指向容器的超出末端的下一位置

c.clear()

删除容器 c 内的所有元素。返回 void

 

一、容器的beginend操作

begin  end 操作产生指向容器内第一个元素和最后一个元素的下一位置的迭代器

c.begin()

返回一个迭代器,它指向容器 c 的第一个元素

c.end()

返回一个迭代器,它指向容器 c 的最后一个元素的下一位置

c.rbegin()

返回一个逆序迭代器,它指向容器 c 的最后一个元素

c.rend()

返回一个逆序迭代器,它指向容器 c 的第一个元素前面的位置

 

五、顺序容器的大小操作

c.size()

返回容器 c 中的元素个数。返回类型为 c::size_type

c.max_size()

返回容器 c 可容纳的最多元素个数,返回类型为 c::size_type

c.empty()

返回标记容器大小是否为 0 的布尔值

c.resize(n)

调整容器 c 的长度大小,使其能容纳 n 个元素,如果 n < c.size(),则删除多出来的元素;否则,添加采用值初始化的新元素

c.resize(n,t)

调整容器 c 的长度大小,使其能容纳 n 个元素。所有新添加的元素值都为 t

 

六、添加元素操作

c.push_back(t)

在容器 c 的尾部添加值为 t 的元素。返回 void 类型

c.insert(p,t)

在迭代器 p 所指向的元素前面插入值为 t 的新元素。返回指向新添加元素的迭代器

c.insert(p,n,t)

在迭代器 p 所指向的元素前面插入 n 个值为 t 的新元素。返回 void 类型

c.insert(p,b,e)

在迭代器 p 所指向的元素前面插入由迭代器 b  e 标记的范围内的元素。返回 void 类型

 

 

同时,string还支持顺序容器的一些容器初始化构造函数和迭代器类型。。。。。

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_34490018/article/details/79835569
今日推荐