文章目录
一、vector
1.构造
-
vector< int > vec; 默认初始化
-
vector< int > vec(vec1); 拷贝构造
-
vector< int > vec = vec1; 赋值
-
vector< int > vector(vec.begin + index1, vec.end()- index2); 指定范围构造
-
vector< int > vec={1,2,3,4,5}; 具体数值构造
-
vector< int > vec(num); 指定vector内元素个数num
-
vector< int > vec(num, value); 指定元素个数num,并初始化为value
1.基本操作
-
push_back(value) 在数组的最后添加一个数据
-
emplace_back(value) 在数组的最后添加一个数据
-
pop_back() 去掉数组的最后一个数据
-
at(i) 得到编号位置的数据
-
begin() 得到数组头的指针
-
end() 得到数组的最后一个单元+1的指针
-
front() 得到数组头的引用
-
back(0 得到数组的最后一个单元的引用
-
max_size() 得到vector最大可以是多大
-
capacity() 当前vector分配的大小
-
size() 当前使用数据的大小
-
resize(size) 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
-
reserve(capacity) 改变当前vecotr所分配空间的大小
-
erase(index) 删除指针指向的数据项
-
clear() 清空当前的vector
-
rbegin() 将vector反转后的开始指针返回(其实就是原来的end-1)
-
rend() 将vector反转构的结束指针返回(其实就是原来的begin-1)
-
empty() 判断vector是否为空(vector.empty())
-
swap(v1,v2) 与另一个vector交换数据
3.基本计算
- 求和: accumulate(v.begin(), v.end(), initalSumValue)
accumulate 算法在numeric.h头文件中定义
accumulate 带有三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值。
-
求最大、最小值: *max_element(), *min_element()
-
排序: sort(v.begin(), v.end())
二、string
1.构造
-
string s1; 默认构造函数,s1为空串
-
string s2(s1); 拷贝构造函数,将s2初始化为s1的一个副本
-
string s3(“valuee”); 将s3初始化一个字符串面值副本
-
string s4(n,‘c’); 将s4 初始化为字符’c’的n个副本
-
cin>>s5; 读取有效字符到遇到空格
-
getline(cin,s6); 读取字符到遇到换行,空格可读入,直到‘\n’结束
-
getline(cin,s7,‘a’); 一个直到‘a’结束,其中任何字符包括’\n’都能够读入,
2.基本操作
-
判空:s.empty() 判断是否为空,bool型
-
字符串长度:s.size() 或 s.length() 返回字符的个数
-
字符索引:s[i] 返回位置为n的字符,从0开始计数
-
字符串拼接:s1+s2 连接,看下面例子:
可用此方法给字符串后面添加字符如:s=s+‘a’;
a: string s2=s1+", "; //对,把一个string对象和一个字符面值连接起来是允许的
b: string s4="hello"+", "; //错,不能将两个字符串面值相加
c: string s5=s1+", "+"world"; //对,前面两个相加相当于一个string对象;
d: string s6="hello" + ", " + s2; //错
-
字符串尾部追加:append()
s.append("abc"); s.append(s1);
-
插入字符: insert(pos,args):在pos之前插入字符args指定的字符
s.insert(s.size(),"tail");//在字符串末尾插入字符串“tail”
-
删除字符:
-
erase(pos,len):删除从pos位置开始的len个字符
s.erase(s.size()-5,5);//删除字符串最后5个字符
-
iterator erase(const_iterator first, const_iterator last):删除迭代器指定范围 [first, last) 内的字符
s.erase(s.end()-5,s.end());//删除字符串最后5个字符
-
-
替换/赋值:s1=s2
-
字符串比较:
- s1 == s2 相等,返回 true 或 false
- !=, <, <=, >, >= 字符串比较,两个字符串短的与长的前面匹配,短的小于长的
- compare()
s1.compare(s2);
- 比较时逐字符比较的,一旦能比较出结果,就不再比较了
- 两个字符串 相同,返回 0。
- 调用字符串 小于 被调用字符串,返回 -1。
- 调用字符串 大于 被调用字符串,返回 1。
-
查找:find(s) 找第一个出现的字符串s,返回其下标值
-
获取子串:substr(startIndex, len) 从下标startIndex开始查找长度为len的子串
-
替换:replace(range,args):删除range范围内的字符,替换为args指定的字符。range可以是一个下标和长度,或者是一对指向字符串的迭代器。
s.replace(11,3,"5th");//替换从下标11开始的3个字符
- (1)用string 或C-string 代替操作string 中从 _Pos1 开始的 _Num1 个字符
basic _ string& replace( size _ type _Pos1 ,size _ type _Num1 , const value _ type* _Ptr ); basic _ string& replace(size _ type _Pos1 ,size _ type _Num1 ,const basic _ string _Str );
- (2)用string 中从 _Pos2 开始的 _Num2 个字符,代替操作string 中从 _Pos1 开始的 _Num1 个字符;用C-string 中的 _Num2 个字符,代替操作string 中从 _Pos1 开始的 _Num1 个字符
basic _ string& replace( size _ type _Pos1 , size _ type _Num1 , const basic _ string& _Str ,size _ type _Pos2 , size _ type ); basic _ string& replace( size _ type _Pos1 , size _ type _Num1 ,const value _ type* _Ptr , size _ type _Num2 );
3.string对象中字符的处理
(头文件cctype.h)
-
常见判断
-
isalnum(s): 如果c是字母或数字,返回 true
-
isalpha(s): 如果c是字母,返回true
-
iscntrl(s): c是控制符,返回true
-
isdigit(s): 如果c是数字,返回true
-
isgraph(s): 如果c不是空格,则可打印,,则为true
-
islower(s): 如果c是小写字母,则为true
-
isupper(s): 如果c是大写字符,则为true
-
isprint(s): 如果c是可打印的字符,则为true
-
ispunct(s ): 如果c是标点符号,则为true
-
isspace(s): 如果c是空白字符,则为true
-
isxdigit(s) :如果c是十六进制数,则为true
-
-
大小写转换
-
tolower(s) :如果c是大写字符,则转换为其小写字母,否则直接返回c
-
toupper(s) : 如果c是小写字符,则转换为其大写字母,否则直接返回c
-
-
字符串与数值之间的转换
- to_string(value):将任意类型的数值转换为string类型
- stoi(s):string->int (注意:待转成数字的字符串不能以0开头)
- stol(s):string->long
- stof(s):string->float
- stod(s):string->double
三、unordered_map
适配器
一、栈stack
二、队列 queue、priority_queue
1、queue
定义
- 默认构造:std::queue < dataType > que;
- 拷贝构造:std::queue < dataType > que(q);
- std::queue < int > que{1, 2, 3, 4};
常用操作
- front():返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
- back():返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
- push(const T& obj):在 queue 的尾部添加一个元素的副本。这是通过调用底层容器的成员函数 push_back() 来完成的。
- push(T&& obj):以移动的方式在 queue 的尾部添加元素。这是通过调用底层容器的具有右值引用参数的成员函数 push_back() 来完成的。
- pop():删除 queue 中的第一个元素。
- size():返回 queue 中元素的个数。
- empty():如果 queue 中没有元素的话,返回 true。
- emplace(arg):用传给 emplace() 的参数调用 T 的构造函数,在 queue 的尾部生成对象。
- swap(queue &other_q):将当前 queue 中的元素和参数 queue 中的元素交换。它们需要包含相同类型的元素。也可以调用全局函数模板 swap() 来完成同样的操作。
2、 priority_queue 优先队列(队列中最大元素总是位于队首,可用于构建大顶堆)
定义
(1)普通定义
priority_queue < int > q; //按照元素从大到小的顺序出队
priority_queue< vector < int >, less < int > > pq1; //按照元素从大到小出队列
priority_queue< int, vector < int >, greater < int > > q; //按照元素从小到大的顺序出队
//构造一个空的优先队列(此优先队列默认为大顶堆)
priority_queue<int> big_heap;
//另一种构建大顶堆的方法
priority_queue<int,vector<int>,less<int> > big_heap2;
//构造一个空的优先队列,此优先队列是一个小顶堆
priority_queue<int,vector<int>,greater<int> > small_heap;
(2)自定义优先级:
struct cmp {
operator bool ()(int x, int y)
{
return x > y; // x小的优先级高 //也可以写成其他方式,如: return p[x] > p[y];表示p[i]小的优先级高
}
};
priority_queue< int, vector < int >, cmp > q; //定义方法
基本操作
empty() 如果队列为空,则返回真
pop() 删除对顶元素,删除第一个元素
push() 加入一个元素
size() 返回优先队列中拥有的元素个数
top() 返回优先队列对顶元素,返回优先队列中有最高优先级的元素
总结
参考链接:
vector: https://www.cnblogs.com/littleswan/p/12143646.html
string: https://www.cnblogs.com/lanclot-/p/11142202.html
string: https://www.cnblogs.com/hgfgood/p/4248323.html
queue: http://c.biancheng.net/view/479.html