第三章:标准库类型:string、 vector 和 bitset类型
来源:互联网 发布:中学生网络安全教育 编辑:程序博客网 时间:2024/04/29 10:10
C++中的类型:
基本数据类型(内置): 参考:( http://blog.csdn.net/phunxm/article/details/5071772 )
bool, char, wchar_t, short, int, long, float, double, long double;
抽象数据类型标准库: 参考:( http://blog.csdn.net/xiaoyecanfeng/article/details/7347303 )
string, vector, bitset.
string类型:
有6个构造函数。常用的4个:
string s1; // 默认构造函数,s1 空串
string s2(s1); // s2 初始化为 s1 的一个副本
string s3(" value "); // s3 初始化为一个字符串字面值
string s4(n,'c'); // s4初始化为字符 ‘c’ 的 n 个副本
其对象有32个操作。常用的有:
cin>>str, getline(cin,str) //读入值 s.empty() // 空串返回 true, 否则返回 else s.size() // 返回字符个数 s[n] s1 + s2 // 返回新生 s1 = s2 // s1 内容替换为 s2副本:释放s1内存,再分配给s1足够内存,复制 s2内容到新分配内存。 v1 == v2 // 相等返回 true,否则返回 false !=, <, <= //保持惯有含义 > 和 >= ( s1+=s2 // equivalent to s1=s1+s2; )*: 当string对象和字符串字面值混合连接操作时,+操作符的操作数至少有一个是string类型的。 // +不能连接两个指针。
string 对象中字符的处理: 头文件<cctype>中定义的函数:
* isalnum(c) // c 为字母或数字,则 true * isalpha(c) // c 为字母,true iscntrl(c) //控制字符,true * isdigit(c) //数字,true isgraph(c) // c 不是空格,但可打印,则 true * islower(c) * isupper(c) isprint(c) // 可打印,则 true * ispunct(c) //标点符号, true ( punctuation ) isspace(c) //空白字符, true isxdigit(c) //十六进制数,true * tolower(c) * toupper(c) // 返回大写 c
try coding:
string st,result_st;getline(cin,st);for(string::size_type index=0;index<st.size();++index){if(!(ispunct(st[index]) || isspace(st[index])))result_st+=tolower(st[index]);}cout<<result_st<<endl;
vector类型(容器):<vector>
vector类型自身不是数据类型,只是一种类模板,可以定义任意多种数据类型。
构造函数:
vector<T> v1; // 默认构造函数,v1 为空
vector<T> v2(v1); // v2 是 v1 的一个副本
vector<T> v3(n,i); // v3 包含 n 个值为 i 的元素
vector<T> v4(n); // v4 含有值初始化的元素的 n 个副本
几种重要操作:
v.empty() // true or false
v.size() // 返回 v 中元素个数
返回类型:
vector<int>::size_type // ok
vector::size_type // error
v.push_back(t) // v 末尾增加一个值为 t 的元素
string word;vector<string> text;while(cin>>word){text.push_back(word);}
v[n] //返回 v 中位置 n 的元素
v1 = v2
v1 == v2 // equal, reurn true
!=, <, <=, >, >= //保持惯有含义
try coding:
例题:3.13. 读一组整数到vector 对象,计算并输出每对相邻元素的和。如果读入元素个数为奇数,则提示用户最后一个元素没有求和,并输出其值。然后修改程序:头
尾元素两两配对(第一个和最后一个,第二个和倒数第二个,以此类推),计算每对元素的和,并输出。
#include<iostream>#include<string>#include<vector>;using namespace std;void sum1(vector<int> &a,int n);void sum2(vector<int> &a,int n);int main(){ int n;cout<<"Enter the number of values:"<<endl;cin>>n;vector<int> val;int tem;for(int i=0;i<n;++i){cin>>tem;val.push_back(tem);}sum1(val,n);cout<<endl;sum2(val,n);return 0;}void sum1(vector<int> &a,int n){for(int k=0;k<n;++k)cout<<a[k]<<" ";cout<<endl;for(int i=0;i<n-1;i+=2){cout<<(a[i]+a[i+1])<<"\t";}if(n%2==1)cout<<a[n-1];}void sum2(vector<int> &a,int n){for(int i=0;i<n;++i)cout<<a[i]<<" ";cout<<endl; for(int i=0;i<n/2;i++)cout<<a[i]+a[n-1-i]<<" ";if(n%2)cout<<"a["<<n/2<<"]"<<"="<<a[n/2];cout<<endl;}
例题:3.14. 读入一段文本到vector 对象,每个单词存储为vector 中的一个元素。把vector对象中每个单词转化为大写字母。输出vector 对象中转化后的元素,每8 个单词为一行输出。
#include<cctype>#include<iostream>#include<string>#include<vector>;using namespace std;int main(){ string word;vector<string> text;while(cin>>word)text.push_back(word);int tag=0;for(vector<string>::size_type ix=0;ix!=text.size();++ix){for(string::size_type ix2=0;ix2!=text[ix].size();++ix2){text[ix][ix2]=toupper(text[ix][ix2]);}if(tag<8){cout<<text[ix]<<" ";++tag;}else{cout<<endl;cout<<text[ix]<<" ";tag=tag%8;}}cout<<endl;return 0;}
bitset类型:<bitset>
从低阶位开始存储。
初始化:
bitset<n> b;
bitset<n> b(u); // u 为 unsigned long 型,使用二进制低阶位;若不足,高阶位为 0.
bitset<16> bitvec1(0xffff); // 0-15 are set to 0 //unsigned long 32bit机器上,使用低阶位
bitset<32> bitvec2(0xffff); // 0-15,--->1;16-31,--->0;
bitset<128> bitvec3(oxffff); // 31-127,--->0 // 高阶位置 0
bitset<n> b(s); // b 是 string 对象 s 中含有位串的副本; s 直接表示为位模式,从右到左读入
bitset<32> bitvec4("1100"); // 2-3,----->1;
bitset<n> b(s,pos,n); // b 是 s 中从位置 pos 开始的 n 个位的副本
string str("1111010111111110011001101");
bitset<32> bitvec5(str,5,4); // 1011. str[5] start. 0-4,--->1101. inverse.
* bitset<32> bitvec6(str,str.size()-4) // use last 4 characters 0-4,--->1011. inverse.
其对象上的操作:
b.any() // 有 1,true
b.none() // 无 1,true
b.count() // 1 的个数;返回 size_t 类型(定义在 cstddef 文件中),机器相关的 unsigned 类型 (return 32bit)
b.size() // 二进制位数;size_t
b[pos]
b.test(pos) // 若为1,true
b.set() // 全部置 1
b.set(pos)
b.reset() // 全部置 0
b.reset(pos)
b.flip() // 逐位取反
b.to_ulong() // 用 b 中同样二进制位返回一个 unsigned long 值,溢出时将引起异常
os << b // 把 b 中位集输出到 os 流
下接第九章:http://blog.csdn.net/liyangguang1988/article/details/8973277
**********************************************************************************************************************************************************
iterator:
const vector<int> vec(10,9);
const vector<T>::iterator iter;
vector<T>::const_iterator iter;
vector<T>::iterator iter;
赋值:
vector<int> nums(10);for(vector<int>::iterator iter=nums.begin();iter!=nums.end();++iter)*iter=9;容器改变长度后,引用iterator 的值失效。例如,vector 调用 push_back后,*iterator 的值将不可信赖。
预处理器的简单介绍:
预处理器:是编译器在编译之前调用的一个独立程序。用来删除注释,加载头文件,执行宏替换。
加载头文件:#include指示只接受一个参数:头文件名。预处理器用指定的头文件的内容替代每个#include。
由此,引出头文件多重包含问题:前2章中定义Sales_item类的头文件包含string库。Sales_item类含有一string类型的数据成员,因此可访问string 头文件。使用Sales_item头文件的程序也可能使用string库。在这种情况下,string头文件被包含了两次:一次通过程序本身直接包含,另一次通过 包含Sales_item头文件而间接包含。 为使头文件安全,使用预处理器定义头文件保护符(预处理器同时允许自定义变量)。
#ifndef SALESITEM_H
#define SALESITEM_H
利用自定义的变量 SALESITEM_H (作为标识) 来保证头文件只被处理一次。
参考:( http://blog.163.com/Hoowang@126/blog/static/16537105820105263171744/ )
标准库名字和头文件:
参考:( http://blog.sina.com.cn/s/blog_525221f90100dadf.html )- 第三章:标准库类型:string、 vector 和 bitset类型
- 第三章 标准库类型(string 、vector、 bitset)
- 第三章 标准库string、vector、bitset类型 —— 第三节 bitset类
- 第三章 标准库string、vector、bitset类型 —— 第一节 标准库string类
- 第三章 标准库string、vector、bitset类型 —— 第二节 vector类及其迭代器
- 标准库类型:string vector bitset
- 标准库类型--string,vector,bitset
- 笔记2 (标准库类型string、vector和bitset)
- 《c++ primer》学习笔记 第三章 标准库类型(string, vector,bitset)
- 标准库类型(vector 、string、 bitset类型)
- C++:标准库类型(string、vector、list、bitset)
- 第三章标准库类型(bitset)
- C++ Primer学习笔记2--c++标准库中的 vector、string 和 bitset 类型
- 标准库vector容器和bitset容器类型
- 第三章 标准库类型(part 4) 标准库 bitset
- 第一部分 基本语言 第三章 标准库类型(3.5标准bitset类型)
- 标准库bitset类型
- 标准库bitset类型
- Log4J 配置,自定义错误,邮件发送,解决中文乱码!
- STL算法学习
- 将多个excel表格打包成一个压缩包文件
- java AtomicInteger 类学习
- Centos Linux安装php的mcrypt扩展
- 第三章:标准库类型:string、 vector 和 bitset类型
- BZOJ 2190([SDOI2008]仪仗队-O(n)线性筛欧拉函数)
- C++作业---继承与派生
- 用VIM做任务管理工具(一)
- 会话固定
- 浅谈实现BVH驱动OGRE中模型制作骨骼动画
- JavaFX之Drag And Drop拖放操作
- Re-installation failed due to different application signatures.Please execute 'adb uninstall com.and
- Jquery乱码终极解决方案