5.容器配接器和字符串
来源:互联网 发布:大数据产业测度 编辑:程序博客网 时间:2024/06/06 01:49
C++ 标准程序库还提供了三种容器配接器。
2.Queue(队列)
3.Priority queues(带优先序的队列)
容器适配器不提供迭代器操作。
Stacks只提供5个成员函数。
1.push()
2.top()
3.pop()
4.empty()
5.size()
Queues提供六个成员函数。
1.push()
2.pop()
3.front()
4.back()
5.empty()
6.size()
priority_queue与set推荐使用set。
有些程序要处理二进制位的有序集,每个位可能包含 0(关)1(开)值。位是用来保存一组项或条件的 yes/no 信息(有时也称标志)的简洁方法。C++标准程序库提供的 bitset 类简化了位集的处理。
bitset对象右边是低位。
初始化方法:
1.bitset<n> b:b有n位,每一个是0
2.bitset<n> b(u):b是unsigned long型u的一个副本(这里是用unsigned long的二进制初始化)。
3.bitset<n> b(s):b是string类型s的一个副本。
#include <iostream>#include <bitset>using namespace std;int main(){bitset<4> a(7);//输出:0111cout << a << endl;long l = 10;bitset<4> b(l);//输出:1010cout << b << endl;string str("1100");bitset<4> c(str);//输出:1100cout << c << endl;c.flip(0);//输出:1101cout << c << endl;cout << c.to_string() << endl;cout << c.to_ullong() << endl;return 0;}
——————
string对象的搜寻函数返回的是一个整数而不是迭代器,所有搜寻函数返回的类型都是string::size_type类型,这是一种无符号的类型。第一个字符的索引值为0,最后一个字符的索引值为numberOfCharacters - 1,和C-String不同,string对象的字符串尾部没有特殊字符'\0'。
如果搜寻失败,必须返回一个特殊值表示,这个值是npos,一般写法是这样的:
if(idx != string::npos)
特别注意的是,如果打算检验搜寻函数的返回值是,应该使用string::size_type类型而不是int或者unsigned。
这里举一个例子,从输入装置取得一个个英文单词,然后将各个字符逆序输出。
如果分隔符只有空格,则可以这样:
#include <iostream>#include <string>#include <sstream>#include <algorithm>using namespace std;int main(){string str;string word;while(getline(cin,str)){stringstream stream(str);while(stream >> word){reverse(word.begin(),word.end());cout << word << " ";}cout << endl;}return 0;}
但是如果分隔符有很多,如‘\t',',','.'等,这这种方法就行不通了。因为getline分隔单词只能用空格,可以用下面的程序。
#include <iostream>#include <string>#include <sstream>#include <algorithm>using namespace std;int main(){const string delim(" \t,.;");string line;while(getline(cin,line)){string::size_type begIndex,endIndex;begIndex = line.find_first_not_of(delim);while(begIndex != string::npos){endIndex = line.find_first_of(delim,begIndex);if(endIndex == string::npos)endIndex = line.size();for(int i = endIndex - 1; i >= static_cast<int>(begIndex); --i)cout << line[i];cout <<' ';begIndex = line.find_first_not_of(delim,endIndex);}cout << endl;}return 0;}注意上面的程序还是用的先find,再while循环,while循环里再find的方法。
string构造函数需要注意的有以下几个:
1.string s(cstr):以C-String cstr作为字符串s的初始值。
2.string s(cstr,chars_len):以C-String cstr前chars_len作为字符串的初值。(这种带len的参数形式是前n个字符)
3.string s(beg,end):以[beg,end)内的字符作为s的初值。
4.string s(s2,pos2):从下标pos2开始的字符拷贝
5.string s(s2,pos2,len2):从下标pos2开始len2个字符的拷贝。
string也可以用reserve()函数来避免重新分配内存,但string的reserve()可以缩减实际容量而vector则不可以,如果string需要减少长度,最快的方法就是用resize()删除元素。
把string类型转换为C-String类型直接调用c_str()函数。
string特有的版本(pos为下标):
1.s.insert(pos,s2)
在下标为pos的元素前插入s2。这里有可以引申为
s2,pos2,len:插入s2中pos2开始的len个字符。
注意insert()函数不接受索引+单个字符的模式。
2.s.erase(pos,len)
删除下标从pos开始的len个字符。
3.s.substr(pos,n)
返回一个字符串,包含s中从下标pos开始的n个字符。这里第二个参数可以省略。
4.s.replace(pos,len,args)
删除下标从pos开始的len个字符,用args代替。
5.s.append(args)
将args串接在s后面,注意只能增加字符串,不能增加字符,如果要加字符用push_back()函数。
args包括:
1.s2
2.s2,pos2,len
3.cp
4.cp,len
5,n,c
6.beg,end
string的搜寻函数:
1.find():搜寻第一个与value相等的字符。
2.rfind():搜寻最后一个与value相等的字符。
3.find_first_of():搜寻第一个与value中某值相等的字符。
4.find_last_of():搜寻最后一个与value中某值相等的字符。
5.find_first_not_of():搜寻第一个与value中任何值都不相等的字符。
6.find_last_not_of():搜寻最后一个与value中任何值都不相等的字符。
其中可以有三个参数,第一个参数总是被搜寻的对象,第二个参数为string内搜寻的起点。注意这里和STL中的函数命名方法不相同!
- 5.容器配接器和字符串
- 容器的比较和字符串的比较
- ruby重要的字符串和容器对象
- 顺序容器--字符串操作
- 编程珠玑第15章字符串stl set和map容器排序字符串
- Spring容器和struts容器
- web容器和servlet容器
- web容器和servlet容器
- 顺序容器和关联容器
- Servlet容器和Web容器
- servlet容器和web容器
- 并发容器和同步容器
- 同步容器和并发容器
- struts2容器和spring容器
- spring容器和springMVC容器
- 关联容器和顺序容器
- springMVC容器和Spring容器
- springMVC容器和Spring容器
- Linux中带缓冲IO和不带缓冲IO的详细说明
- 使用广播接收器
- VMware和VirtualBox中的网络适配器类型及虚拟网络性能优化
- java.lang.NoSuchMethodError解决办法,
- 深入理解Servlet线程安全问题
- 5.容器配接器和字符串
- 人生何处不相逢
- 嵌入式 hi3518c默认看门狗没有开启,uboot汇编start.s解析
- Cocos2dx 3.0 过渡篇(二十六)C++11多线程std::thread的简单使用(上)
- 回文数(山东理工OJ)
- 【spark系列4】分类之SVMWithSGD
- 初识GCC
- 解决Qt中文乱码问题
- Graphics.MeasureString 不能获得精确宽度的问题