-
构造函数
这里的技巧还是挺多的,但容易忽略
vector v
,默认初始化,大小为0,适合不知道元素个数的情况;vector v(v1)
或vector v = v1
,拷贝一份来构造,v
和v1
具有相同的元素;vector v = {value1, value2, ...}
或vector v {value1, value2, ...}
,用已知元素初始化;vector v(number)
,指定空间为number
,每个元素进行缺省的值初始化。对于int,也就是被赋值为0。当程序运行初期元素大致数量可预知,而元素的值需要动态获取的时候,可采用这种初始化方式;vector v(number, value)
,还是指定空间为number
,只不过这number
个元素都初始化为value
。 -
二维 vector 的初始化
vector < vector > v
,默认;vector < vector > v(v_d2)
,用二维vectorv_d2
来初始化v
;vector < vector > v(rownum, vector_)
,第一个参数的含义是“有多少个子vector”,第二个参数表示每个子vector是什么样的。第二个参数可以传入上面讲到的构造一维vector的任何形式。比如:vector < vector > v(rownum, vector (colnum))
表示一个全部元素为0的rownum
行colnum
列的二维vector,或者直接理解为二维数组;再比如vector < vector > v(rownum, vector (colnum, 10))
就是将这个二维vector再初始化为10。 -
访问
v[idx]
、v.front()
、v.back()
,访问索引为idx
的元素,访问第一个元素,访问最后一个元素。 -
插入与删除
v.push_back (value)
,在vector末尾添加一个元素value
;v.insert (iter, value)
,在迭代器位置添加元素value
;v.pop_back ()
,删除vector末尾元素;v.erase(iter)
,删除迭代器位置的元素。 -
翻转、排序、获取最大值最小值元素
这些函数所在头文件为algorithm,而不是vector
reverse(v.begin(), v.end())
,翻转。sort(v.begin(), v.end())
,排序,也可以传入cmp
。max_element(v.begin(), v.end())
和min_element(v.begin(), v.end())
分别表示获取最大值和最小值对应的迭代器,所以一般我们都在前面加上*
,直接获取元素值。另外,由于vector和string可以采用
*(iter+1)
的方式进行访问(其他STL不行),所以可以出现部分翻转和部分排序,比如reverse(v.begin(), v.end())
、sort(v.begin()+1, v.end())
、*max_element (v.begin(), v.end()-1)
等。 -
常见的函数
size()
、empty()
、clear()
。
-
构造函数
这里的技巧还是挺多的,但容易忽略
string s
:空串;string s(str)
:与str
一样的串;string s(str, pos, number)
:相当于取str
从索引pos
开始的number
个字符的子串进行初始化;如果不传入number
则取到str
末尾(这完全就是substr
后再赋值嘛)string s(number, ch)
:用number
个字符ch
进行初始化。 -
字符串长度
.size()
和.length()
(我比较喜欢前者,因为前者输入的字符少~) -
获取最后一个位置的字符
s.back()
-
大小写转换
转换为大写:
transform (s.begin (), s.end (), s.begin (), ::toupper)
转换为小写:transform (s.begin (), s.end (), s.begin (), ::tolower)
也可以遍历字符串,对每个字符进行
s[i] = tolower(s[i])
的操作来转为小写。 -
查找
未查找到:
s.find ('a') == string::npos
,返回1表示未找到,返回0表示找到了从索引为
i
处开始查找:s.find ('a', i)
,若找到,返回所在索引位置,没找到返回string::npos
当然,也可以查找是否包含某个子串。
-
获取子串
s.substr (pos, number)
,从索引为pos
的位置开始向后截取number
个元素(含pos
)s.substr (pos)
,从索引为pos
的位置开始向后截取到末尾 -
删除字符或字符串
s.erase(pos, number)
,从索引为pos
的位置开始向后删除number
个元素(含pos
)s.erase(pos)
,从索引为pos
的位置开始向后删除到末尾 -
插入字符串
s.insert (pos, str)
,将str
的首字符放在s
的pos
位置,其余字符后移。str
只能是字符串不能是字符。 -
部分替换
s.replace(pos, number, str)
,将子串s[pos~pos+number-1]
的位置全部换成字符串str
。另一种传参形式为
s.replace(pos, number, n, ch)
等价于s.replace(pos, number, string(n, ch))
。 -
.c_str()
的用法将string(C++)转换为char *(C),常见的两个用法:
printf(%s, s.c_str())
、atoi(s.c_str())
-
字符串比较大小
如果题目要求按字典序排序,则直接通过操作符
>
、{1, 2}, {5, -1}, {-1, 0}};
关注打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?