C/C++基础复习(二)标准库类型

C/C++ 2014年06月23日 ,

经过对内置基本类型的复习后,继续对C/C++基础知识进行了温习。http://furzoom.com/

标准库类型

命名空间

::操作符是作用域操作符。含义是右操作数的名字可以在左操作数的作用域中找到。

在头文件中总是使用完全限定的标准库的名字。减少using的声明的使用。

注意:头文件中应该只定义确实必要的东西。请养成这个好习惯。

string

使用string需要如下声明:

#include <stirng>
using std::string;

常用string构造函数,如下:

string();
string (const string&amp; str);
string (const string&amp; str, size_t pos, size_t len = npos);
string (const char* s);
string (const char* s, size_t n);
string (size_t n, char c);

注意:字符串字面值与string数据类型是不同的。

string s;
std::cin>>s;
  • 读取并忽略开关所有的空白字符。
  • 读取字符直至再次遇到空白字符。

要读取整行的内容可以使用std::getline()函数,并不包含换行符。

istream::getline (istream& is, string& str);

常用string对象操作

string成员函数说明

成员函数 说明
s.empty() 如果s为空,则返回true,否则返回false
s.size() 返回s中字符的个数
s[n] 返回s中位置为n的字符,位置从0开始计算
s1 + s2 把s1和s2连接成一个新字符串,返回新生成的字符串
s1 = s2 把s1内容替换为s2的副本
s1 == s2 比较s1与s2的内容,相等则返回true,否则返回false
!=, <, <=, >, >= 保留这些操作符惯有的含义

注意:size()返回值类型为string::size_type。

字符处理函数

字符处理函数 说明
isalnum(c) 如果c是字母或数字,则返回true。
isalpha(c) 如果c是字母,则返回true。
iscntrl(c) 如果c是控制字符,则返回true。
isdigit(c) 如果c是数字,则返回true。
isgraph(c) 如果c是不是空格,得可打印,则返回true。
islower(c) 如果c是小写字母,则返回true。
isprint(c) 如果c是可打印的字符,则返回true。
ispunct(c) 如果c是标点符号,则返回true。
isspace(c) 如果c是空白字符,则返回true。
isupper(c) 如果c是大写字母,则返回true。
isxdigit(c) 如果c是十六进制数,则返回true。
tolower(c) 如果c是大写字母,则返回其小写字母形式,否则直接返回。
toupper(c) 如果c是小写字母,则返回其大写字母形式,否则直接返回。

注意:可打印的字符指可以表示的字符;空白字符则是空格、制表符、垂直制表符、回车符、换行符、进纸符中的任意一种;标点符号则是除了数字、字母和可打印的空白字母以外的其他可打印字符。

vector

vector称为容器,是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。是一个类模板

vector构造函数

构造函数 说明
vector<T> v1; 默认构造函数。
vector<T> v2(v1); v2是v1的一个副本。
vector<T> v3(n, i); v3包含n个值为i的元素。
vector<T> v4(n); v4含有n个默认构造的元素。

如果没有指定元素的初始化式,那么标准库将自行提供一个元素初始值进行值初始化。对内置类型初始化为0;对类对象使用默认构造函数进行初始化。

vector成员函数说明

成员函数 说明
v.empty() 如果v为空,则返回true,否则返回false。
v.size() 返回v中元素的个数。
v.push_back(t) 在v的末尾增加一个值为t的元素。
v[n] 返回v中位置为n的元素。
v1 = v2 把v1的元素替换为v2中元素副本。
==、!=、<、<=、>、>= 保持这些操作符惯有的含义。

iterator

iterator是遍历窗口内元素的数据类型。标准库为每一种标准容器定义了一种迭代器类型。

vector的iterator使用实例如下,

for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
*iter = 0;    // set element to which iter refers to 0

const_iterator类型对窗口内元素只读。text是vector<string>类型,

for(vector<string>::const_iterator iter = text.begin(); iter != text.end(); ++iter)
cout<<*iter<<endl;    // print each element in test

注意:不要混淆const_iterator和const iterator。const_iterator所指向元素的内容是只读的,const iterator指向的元素是只读的。

vector<int> furzoom(10);    // furzoom is noncoust
const vector<int>::iterator cit = furzoom.begin();
*cit = 1;                   // ok: cit can change its underlying element
++cit;                      // error: can't change the value of cit

const iterator很少使用。
vector iterator支持迭代器算术操作(iterator arithmetic)。如

iter + n;
iter - n;
iter1 + iter2;
iter1 - iter2;

注意:改变vector长度后,应该更新iterator后再使用。

bitset

bitset是二进制位有序集。其头文件需求为,

#include <bitset>
using std::bitset;

bitset构造函数说明

构造函数 说明
bitset<n> b; b有n位,每位都是0.
bitset<n> b(u); b是unsigned long型u的一个副本。
bitset<n> b(s); b是string对象s中含有的位串的副本。
bitset<n> b(s, pos, n); b是s中从位置pos开始的n个位的副本。

注意:长度n必须是常量表达式。

bitset<32> bitvec;             // 32 bits, all zero
bitset<32> bitvec1(0xffff);    // bits 0...15 are set to 1; 16...31 are 0
string strval("1100");
bitset<32> bitvec2(strval);    // bits 2 and 3 are set to 1; others are 0
string strval2("1111111000000011001101");
bitset<32> bitvec3(strval2, 5, 4);// 4 bits starting at strval2[5], 1100

bitset成员函数说明

成员函数 说明
b.any() b中有位为1,返回true,否则false。
b.none() b中全为0,返回true,否则false。
b.count() 返回b中位为1的个数。
b.size() 返回b中二进制位的个数。
b[pos] 返回在pos位的二进制位。
b.test(pos) b中pos位为1,返回true,否则false。
b.set() 将b中所有位置1.
b.set(pos) 将b中pos位置1.
b.reset() 将b中所有位置0.
b.reset(pos) 将b中pos位置0.
b.flip() 将b中所有位按位取反。
b.flip(pos) 将b中pos位取反。
b.to_ulong() 返回与二进制位对应的unsigned long值。
<< 将b中的位输出到流。

Terms

abstract data type

bitset

cctype header

class template

container

difference_type

empty

getline

high-order

index

iterator

iterator arithmetic

low-order

off-the-end iterator

push_back

sentinel(哨兵,一种程序设计技术,用一个值来控制处理过程)

size

size_t

size_type

using declarations

value initialization

++ operator

:: operator

[] operator

* operator

<< operator

>> operator

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
日志标题:《C/C++基础复习(二)标准库类型》
日志链接:http://furzoom.com/c-cplusplus-primetive-knowledge-2/
博客名称:枫竹梦

发表评论

插入图片

NOTICE1:请申请gravatar头像,没有头像的评论可能不会被回复!

回到顶部