stl小知识点

来源:互联网 发布:yc网络语言是什么意思 编辑:程序博客网 时间:2024/06/07 09:01

1.string重载了[ ] 、> 、<、==操作符。

stl中的string是用数组存储的,所以其重载了操作符[ ],可以直接索引

字符串的常用操作中就有字符串比较。所以其重载了 >、< 、== 操作符。而在c语言中是借助strcmp来完成的

2.=是可以给字符串赋值的。因为stl中的string是对象,内容是可以修改的。

string a="abc";//初始化

a="fefef";//对a重新赋值。

3.vector<int> a ;

a[5]=3;//这句是错的,虽然vector重载了[ ],但是当使用其进行赋值时,要保证下标不超过其size,这里新建的a的size=capacity=0;错误的理由很简单,其错误类似于数组下标越界。vector中是检查数组越界的!。

4. string中的字符串结尾时没有\0的!!所以判断其是否结束不能用while( str[i] ) ,可以用长度来判断while(i < str.length())。

5.删除vector中相同的元素,包含其本身

1 2 3 3 4 5
remove(beg,end,1)就是
2 3 3 4 5 5 
remove(beg,end,3)就是
1 2 4 5 4 5
remove(beg,end,5)还是
1 2 3 3 4 5

1、remove并不是删除,仅仅是移除,要加上erase才能完成删除。   
2、remove并不是删除指定位置的元素,而移除所有指定的元素。   
3、用algorithm代替成员函数不是一个好的选择。

remove只是简单地用"未删除"对象来填补被删除对象留下的缺口,每一个删除对象在尾部还是会留下一个相应的"死亡"对象.   
可以这样来使用remove...   
vector<int>vec;   
vec.erase(remove(vec.begin(),vec.end(),value),vec.end());   //value是要删除的值


0 0
原创粉丝点击