STL顺序容器篇--sring容器中的迭代器

C++:   C语言+类+模板

STL的6大组件:容器,迭代器,算法     适配器,分配器,仿函数
容器包含:顺序容器,关联容器
首先顺序容器中包含string容器,数组容器(vector,array,hash_map),链表容器(list,forward_list),双端队列(deque);
其次,关联容器包含set,map,multiset,multimap等
怎么学STL?从定义,属性,输出,修改,操作函数,运算符重载6个方面出发

一. 定义一个string的迭代器

下面介绍string容器中的迭代器:

string::iterator ite;

二. 怎么去理解string容器的迭代器

就相当于定义了一个指向string对象元素的指针,本质相当于char* 指针,当然char*指针只能够指向char型字符的地址,而string迭代器可以指向任意类型字符的地址,比如int,char,float等等。

定义完了,就跟指针的用法一样了。

三. string容器的迭代器失效的问题

string重新申请空间的时候,迭代器会失效的。
在VS2005版本中,string容器的容量计算大小是15+16*n,即至少申请15个容量。
情况一:假设我们原本string容器已经存了7个字符,现在通过添加5个字符.因为原来15个空间还没存满,这5个字符会在7个字符的尾部添加;迭代器依然指向string容器首地址,因此迭代器不会失效。

sting str('abcdefg');
str::iterator ite;
ite=str.begin();
str.append(5,'a');
for (size_t  i = 0; i < str.size(); i++) //size_t代表无符号整形
{
cout << *ite << "  ";
ite++;
}

情况二:
如果我们将上面str.append(5,'a');改成str.append(18,'a');那么迭代器会失效
因为此时15个空间已经不够用了,string重新申请新的空间,此时迭代器已经失效了。

四.string成员函数涉及到的迭代器

iterator begin();函数返回一个迭代器,指向字符串的第一个元素;
iterator end(); 函数返回一个迭代器,指向字符串某尾元素
append(input_iterator start,input_iterator end);
例子:string str("abc");
          string str1("efg");
          str.append(str1.begin(),str.end());
         cout<<str; //这样输出abcefg

iterator erase(iterator pos);
例子: string str("abcdefgh");
           str.earse(str.begin());
           cout<<str; //输出bcdefgh

iterator insert(iterator i, size_type num, const char &ch);
例子: string str("abcdefgh")
           str.insert(str.begin()+2,3,'N')
           cout<<str;//输出abNNNcdefgh

五.string容器涉及的算法

#include<algorithm>
涉及算法1:遍历算法 for_each();
例子:
            string str("abcdef");
            for_each(str.begin(),str.end(),fun())
             //其中第三个fun()函数自己定义,就是对遍历函数看要怎么操作,fun()参数                   类型跟str中类型一致
涉及算法2:排序算法 sort();
            string str("baecdfg");
            sort(str.begin(),str.end());
            cout<<str;//输出abcdefg,注意默认从小到大排序
            sort(str.begin(),str.end(),greater<char>());//输出gfedcba,从大到小排列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值