String,Vector以及迭代器

来源:互联网 发布:汉诺塔算法 编辑:程序博客网 时间:2024/06/08 09:17

1、        String

1、string.size()

返回类型为string::size_type类型,是string类类型自定义的一种配套类型,使得程序与机器类型无关,具有更好的可移植性。Size_type为unsigned类型,注意在使用时不要赋给int型。

2、string关系操作符区分大小写

3、当进行string和字符串字面值的连接操作时,+的左右至少有一个是string。如string s = “hello”+”world”不正确。

4、string可以通过下标操作符或迭代器来访问单个字符。

5、对于单个字符,cctype头文件中定义了一些方法来判定其是字母(isalpha),数字(digit),标点等,还定义了大小写转换的方法。

6、string支持vector的操作,但不支持栈方式操纵容器,如front,back,pop_back。

7、s.substr(pos,n)//取子串

   s.append(args)//将args串接在s后面

   s.replace(b,e,args)//用args替换s的部分串

    string定义了大量的查找操作,用来查找字符的第一次/最后一次出现。

 

2、        Vector

1、vector是一个类模板,将其实例化后才是真正的类类型,如vector<int>

2、vector的一个重要属性就是在运行时可以高效的添加元素,所以一般情况下是先初始化一个空的vector对象,然后再动态的添加元素。

3、如果vector没有指定元素的初始化式,那么标准库将自行提供一个元素初始值进行值初始。无论内置类型还是有默认构造函数的类类型还是没有默认构造函数的类类型。

4、和string类似,成员函数size的返回类型是size_type。

5、访问vector的每一个元素,可以使用下标操作符或者迭代器。

6、Vector的下标操作只能获取已经存在的元素,而不能用于添加元素,添加元素使用push_back()。

7、可以使用数组初始化vector,vector<int>ivec(int_arr , int_arr+arr_size)。第一个参数指向数组的第一个元素,第二个参数指向数组最后一个元素的下一个位置。

 

3、        Bitset

1、二进制位的有序集,在定义bitset时,要明确bitset含有多少位。

2、用unsigned值初始化bitset对象时,若bitset类型长度大于unsigned值的二进制长度,只使用unsigned的低阶位。

3、用string对象初始化bitset时,string的下标最大的字符初始化bitset这个二进制串的最低位,即反向转化。

4、Bitset对象有多种操作,可以计算1的个数(count()方法,返回值为size_t,unsigned型),0的个数等

5、可以用下标操作来读或者写二进制位。Bitset对象可以整体输出。


4、        迭代器

1、C++为每种容器都定义了迭代器(iterator),只有少数的容器支持下标操作,现在倾向于使用迭代器操作容器。

2、迭代器类似于指针,可以进行引领操作*,自增操作,算数操作,逻辑操作,等等。

3、迭代器的范围为[begin,end)

4、每种容器都定义了一种const_iterator的迭代器,只能通过它读取容器中的元素,而不能改变值。对const_iterator解引用时,得到一个指向const对象的引用。

5、在改变容器的长度之后,如插入操作,原有的迭代器就会失效,应及时更新迭代器。常用的做法是每次需要使用迭代器时进行计算,而不是将其计算之后存储在变量中重复使用,尤其是end()。

6、Vector和deque支持额外的迭代器运算:迭代器算术运算,关系运算。因为只有这两种容器支持对元素的随机访问。

7、     插入迭代器

3种插入器:

Back_inserter:创建使用push_insert实现插入的迭代器

Front_inserter:创建使用push_front实现插入的迭代器

Inserter:使用insert实现插入操作。

8、     Iostream迭代器

流迭代器将它们所对应的流视为特定类型的元素序列。只定义了最基本的迭代操作:自增,解引用和赋值。

 

使用流迭代器时,可以用泛型算法从流对象中读数据或将数据写到流对象中。

 

流迭代器是模版,任何定义了输入操作符(>>)的类型都可以定义Istream_iterator,任何定义了输出操作符(<<)的类型都可以定义ostream_iterator。

如:

Istream_iterator<int>cin_it(cin);

不绑定流时表示Istream_iterator的超出末端迭代器:

Istream_iterator<int>end_of_stream。

 

ostream_iterator<int>output(cout,” ”);第二个参数是将元素写入流时的分隔符

9、     反向迭代器

反向遍历容器的迭代器。reverse_iterator

 

原创粉丝点击