读书笔记--容器操作总结

来源:互联网 发布:北京程序员周末培训班 编辑:程序博客网 时间:2024/05/27 21:49

下述中的某些操作,有些编译器不支持;

顺序容器类型:vector, deque, list, forward_list, array, string

args表示多种参数形式,下面不一一列出



------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


string

使用时包含头文件:

#include<string>

using std::string


初始化string对象的方式:

string s1                                   默认初始化,s1是一个空串

string s2(s1)                           s2是s1的副本

string s2 = s1                          等价于s2(s1),s2是s1的副本

string s3("value")                    s3是子面值"value"的副本,除了字面值最后的那个空字符外

string s3 = "value"                   等价于s3("value“),s3是字面值”value"的副本

string s4(n, 'c')                         把s4初始化为由连续n个字符c组成的串

string s(cp,n)                           s是cp指向的数组中的前n个字符的拷贝。此数组至少应该包含n个字符

string s(s2, pos2)                   s是string s2从下标pos2开始的字符的拷贝。若pos2>s2.size(),构造函数的行为未定义

string s(s2, pos2, len2)         

s是string s2从下标pos2开始len2个字符的拷贝。若pos2>s2.size(), 构造函数的行为未定义。不管len2的值多少,构造函数至多拷贝s2.size()-pos2个字符                                                      



string 的操作:

os << s                                      将s 写出到输出流os当中,返回os

is >> s                                       从is中读取字符串赋给s,字符串以空白分隔,返回is

getline(is, s)                             从is中读取一行赋给s,返回is

s.empty()                                   s为空返回true, 否则返回false

s[n]                                             返回s中第n个字符的引用,位置n从0计起

s1 + s2                                      返回s1和s2连接后的结果

s1 = s2                                      用s2的副本代替s1中原来的字符

s1 == s2                                    如果s1和s2中所含字符完全一样,则他们相等,string对象的相等性判断对字母大小写敏感

< , <=, >, >=                               利用字符在字典中的顺序进行比较,且对字母的大小写敏感

a.swap(b)                                  交换a和b的元素

c.begin(), c.end()                       返回指向c的首元素和尾元素之后位置的迭代器

c.cbegin(), c.cend()                   返回const_iterator

s.substr(pos,n)                          返回一个string,包含s中从pos开始的n个字符的拷贝。pos的默认值为0。n的默认值为s.size() - pos,即拷贝从pos开始的所有字符

s.append(args)                         将args追加到s。返回一个指向s的引用

s.replace(range, args)             删除s中范围range内的字符,替换为args指定的字符。range或者是一个下标和一个长度,或者是一对指向s的迭代器。返回一个指向s的引用


string的插入操作:

c.insert(args)                            将args中的元素拷贝进c

c.insert(p,t)                                在迭代器p指向的元素之前创建一个值为t,返回指向新添加的元素的迭代器

c.insert(p, n, t)                           在迭代器p指向的元素之前插入n个值为t的元素,返回指向新添加的第一个元素的迭代器;若n=0,则返回p

c.insert(p,b, e)                           

将迭代器b和e指定的范围内的元素插入到迭代器p指向的元素之前。b和e不能指向c中的元素。返回指向新添加的第一个元素的迭代器,若范围为空,则返回p

c.insert(p,il)                                il是一个花括号包围的元素值列表。将这些给定值插入到迭代器p指向的元素之前。返回指向新添加的第一个元素的迭代器;若列表为空则返回p

s.insert(pos, args)                  

在pos之前插入args指定的字符。pos可以是一个下标或一个迭代器。接受下标的版本返回一个指向s的引用;接受迭代器的版本返回第一个插入字符的迭代器


string访问元素:

c.back()                                      返回c中尾元素的应用,若c为空,函数行为未定义

c.front()                                       返回c中首元素的引用,若c为空,函数行为未定义

c[n]                                              返回c中下标为n的元素的引用,n是一个无符号整数。若n>=c.size(),则函数行为未定义

c.at(n)                                          返回下标为n的元素的引用。如果下标越界,则抛出out_of_range异常


string的删除操作:

c.erase(args)                             删除args指定的元素

c.clear()                                       删除c中的所有元素,返回void

c.pop_back()                              删除c中尾元素,若c为空,则函数行为未定义。函数返回void

c.erase(p)                                  

删除迭代器p所指定的元素,返回一个指向被删元素之后元素的迭代器,若p指向尾元素,则返回尾后(off-the-end)迭代器。若p是尾后迭代器,则函数行为未定义

c.erase(b, e)                              删除迭代器b和e所指定范围内的元素。返回一个指向最后一个被删元素之后元素的迭代器,若e本身就是尾后迭代器,则函数也返回尾后迭代器

s.erase(pos, len)                      删除从位置pos开始的len个字符。如果len被忽略,则删除从pos开始直至s末尾的所有字符。返回一个指向s的引用


string的容器大小操作:

s.size()                                       返回s中字符个数,返回的类型是string::size_type

c.max_size()                             c可保存的最大元素数目

c.resize(n)                                 调整c的大小为n个元素。若n<c.size(), 则多出的元素被丢弃。若必须添加新的元素,对新元素进行值初始化

c.resize(n, t)                              调整c的大小为n个元素。任何新添加的元素都初始化为值t

c.shrink_to_fit()                        请将capacity()减少为与size()相同大小

c.capacity()                                不重新分配内存空间的话,c可以保存多少元素

c.reserve(n)                               分配至少能容纳n个元素的内存空间


string的替换操作:

seq.assign(b, e)                     将seq中的元素替换为迭代器b和e所表示的范围中的元素。迭代器b和e不能指向seq中的元素

seq.assign(il)                          将seq中的元素替换为初始化列表il中的元素

seq.assign(n, t)                       将seq中的元素替换为n个值为t的元素

s.assign(args)                         将s中的字符替换为args指定的字符。返回一个指向s的引用


string搜索操作

s.find(args)                              查找s中args第一次出现的位置

s.rfind(args)                             查找s中args最后一次出现的位置

s.find_first_of(args)                在s中查找args中任何一个字符第一次出现的位置

s.find_last_of(args)                在s中查找args中任何一个字符最后一次出现的位置

s.find_first_not_of(args)        在s中查找第一个不在args中的字符

s.find_last_not_of(args)        在s中查找最后一个不在args中的字符


string的比较函数

s.compare(args)                       根据s是等于、大于、还是小于参数指定的字符串,s.compare返回0,正数或负数


string和数值之间的转换

to_string(val)                             一组重载函数,返回数值val的string表示。val可以是任何算术类型。对每个浮点类型和int或更大的整形都有相应版本的to_string。与往常一样,

                                                     小整数会被提升

stoi(s, p ,b)                                 

stol(s, p,b)                                

stoul(s, p, b)

stoll(s, p ,b)

stoull(s,p, b)

返回s的起始子串(表示整数的内容)的数值,返回值类型分别是int, long, unsigned long, long long, unsigned long long 。b表示转换所用的基  数,默认值是10。p是size_t指针,用来保存s中第一个非数值字符的下标,p默认是0,即函数不保存下标 

stof(s ,p)                                       

stod(s, p)

stold(s,p)

返回s的起始子串(表示浮点数内容)的数值,返回值类型分别是float, double或long double. 参数p的作用于整数转换函数中的一样

                        

sting 转换为C风格字符串:

string s("Hello World");

const char * str = s.c_str();


string流

使用时所需包含头文件:

#include<sstream>

using std::istringstream;

using std::ostringstream;

istringstream从string中读取数据,ostringstream想string写入数据,而头文件sstream既可从string读数据也可向string写数据,头文件sstream中定义的类型都继承自iostream头文件中定义的类型。


stringstream特有的操作:

sstream strm;                            strm是一个未绑定的stringstream对象。sttream是头文件sstream中定义的一个类型

sstream strm(s);                       strm是一个sstream对象,保存strings的一个拷贝,此构造函数是explicit的

strm.str()                                     返回strm所保存的string的拷贝

strm.str(s)                                   将string s拷贝到strm中,返回void


cctype头文件中的函数:

isalnum(c)                                 当c是字母或数字时为真

isalpha(c)                                  当c是字母时为真

iscntrl(c)                                     当c是控制字符时为真

isdigit(c)                                     当c是数字时为真

isgraph(c)                                  当c不是空格但可打印时为真

islower(c)                                   当c是小写字母时为真

isprint(c)                                     当c是可打印字符时为真(即c是空格或c具有可视形式)

ispunct(c)                                    当c是标点符号时为真(即c不是控制字符,数字,字母,可打印空白中的一种)

isspace(c)                                  当c是空白时为真(即c是空格,横向制表符,纵向制表符,回车符,换行符,进纸符中的一种)

isupper(c)                                   当c是大写字母时为真

isxdigit(c)                                     当c是十六进制数字时为真

tolower(c)                                     如果c是大写字母,输出对应的小写字母,否则原样输出c

toupper(c)                                    如果c是小写字母,输出对应的大写字母,否则原样输出c


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


vector

使用时所要包含头文件:

#include<vector>

using std::vector


初始化vector对象的方法:

vector<T>v1                                  v1是一个空vector,他潜在的元素是t类型的,执行默认初始化

vector<T>v2(v1)                            v2中包含有v1所有元素副本

vector<T>v2 = v1                          等价于v2(v1),v2中包含有v1所有元素的副本

vector<T>v3(n, val)                       v3包含了n个重复元素,每个元素的值都是val

vector<T>v4(n)                              v4包含了n个重复の执行值初始化的对象

vector<T>v5{a,b,c....}                    v5包含了初始值个数的元素,每个元素被赋予相应的初始值

vector<T>v5 = {a,b,c...}                 等价于v5{a,b,c...}

seq.assign(b, e)                           将seq中的元素替换为迭代器b和e所表示的范围中的元素。迭代器b和e不能指向seq中的元素

seq.assign(il)                                将seq中的元素替换为初始化列表il中的元素

seq.assign(n, t)                             将seq中的元素替换为n个值为t的元素


vector支持的操作

v.empty()                                       如果v不含有任何元素,返回真,否则返回假

v.push_back(t)                              向v的尾端添加一个值为t的元素

v[n]                                                  返回v中第n个位置的元素的引用

v1 = v2                                            用v2中元素的拷贝替换v1中的元素

v1 = {a, b, c....}                              用列表中元素的拷贝替换v1中的元素

v1 == v2                                         v1和v2相等当且仅当他们的元素数量相同且对应位置的元素值相同

v1 != v2                                           与上面相反

< , <= , > , >=                                 以字典序顺序进行比较

a.swap(b)                                      交换a和b的元素

c.begin(), c.end()                          返回指向c的首元素和尾元素之后位置的迭代器

c.cbegin(), c.cend()                      返回const_iterator


vector的插入操作

c.insert(args)                                将args中的元素拷贝进c

c.insert(p,t)                                    在迭代器p指向的元素之前创建一个值为t,返回指向新添加的元素的迭代器

c.insert(p, n, t)                               在迭代器p指向的元素之前插入n个值为t的元素,返回指向新添加的第一个元素的迭代器;若n=0,则返回p

c.insert(p,b, e)                              

将迭代器b和e指定的范围内的元素插入到迭代器p指向的元素之前。b和e不能指向c中的元素。返回指向新添加的第一个元素的迭代器,若范围为空,则返回p

c.insert(p,il)                                    il是一个花括号包围的元素值列表。将这些给定值插入到迭代器p指向的元素之前。返回指向新添加的第一个元素的迭代器;若列表为空则返回p


vector访问元素:

c.back()                                      返回c中尾元素的应用,若c为空,函数行为未定义

c.front()                                       返回c中首元素的引用,若c为空,函数行为未定义

c[n]                                              返回c中下标为n的元素的引用,n是一个无符号整数。若n>=c.size(),则函数行为未定义

c.at(n)                                          返回下标为n的元素的引用。如果下标越界,则抛出out_of_range异常


vector的删除操作:

c.erase(args)                             删除args指定的元素

c.clear()                                       删除c中的所有元素,返回void

c.pop_back()                              删除c中尾元素,若c为空,则函数行为未定义。函数返回void

c.erase(p)                                  

删除迭代器p所指定的元素,返回一个指向被删元素之后元素的迭代器,若p指向尾元素,则返回尾后(off-the-end)迭代器。若p是尾后迭代器,则函数行为未定义

c.erase(b, e)                             删除迭代器b和e所指定范围内的元素。返回一个指向最后一个被删元素之后元素的迭代器,若e本身就是尾后迭代器,则函数也返回尾后迭代器


vector的容器大小操作:

s.size()                                       返回s中字符个数,返回的类型是string::size_type

c.max_size()                             c可保存的最大元素数目

c.resize(n)                                 调整c的大小为n个元素。若n<c.size(), 则多出的元素被丢弃。若必须添加新的元素,对新元素进行值初始化

c.resize(n, t)                              调整c的大小为n个元素。任何新添加的元素都初始化为值t

c.shrink_to_fit()                        请将capacity()减少为与size()相同大小

c.capacity()                                不重新分配内存空间的话,c可以保存多少元素

c.reserve(n)                               分配至少能容纳n个元素的内存空间



使用数组初始化vector对象:

int  int_arr[] = {0, 1, 2, 3, 4, 5, 6};

vector<int> ivec(begin(int_arr), end(int_arr));

vector<int>ivec(a, a + 7);



------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------









0 0
原创粉丝点击