string
快速回忆:
求长度
int len=s1.size() //“asd”长度为3
和char类型互转:
string s1;
char a[10]="123"
s1=a;
printf("%c",s1.c_str()[1]);
printf("%s",s1.c_str());
拼接
s1+=s2
s1.append(s2,2); //前两个字符
s2.append(s2,2,3); //2-3个字符
查找其中字符或者字符串
找不到返回-1
int temp=s1.find('a',1); //表示从1也就是第二个字符开始找,不加默认从头开始找,返回角标给temp。
s1.rfind('a',1); //从又右开始找
s1.find(s2); //查找字符串
s1.find(s2[1]); //查找s2中的第二个字符
替换string中的字符
s3=s1.replace(0,2,s2); //将s1中的前两个字符换成s2,然后赋给s3,这里的0,2理解为[0,2)
删除其中字符
s2=s1.erase(2); //将角标2及其后面的字符删除
s2=s1.erase(2,3) //2为起始角标,3为长度。
vector
创建使用
(1)
vector<类型> xxx;
注:对象创建之后是没有内存空间的(并没有初始化),要么直接xxx.push_back()往里面存东西,要么使用下面的语句进行分配空间,才可以对其进行存储
xxx.reserve(2); //至少容纳2个元素
或者创建的时候同时赋值:
vector<int> primes {2, 3, 5, 7, 11, 13, 17, 19};
(2)
vector<double> values(20); //values 容器开始时就有 20 个元素,它们的默认初始值都为 0
vector<double> values(20,1.0); ////values 容器开始时就有 20 个元素,它们的默认初始值都为 1
(3)
int a[]={1,2,3,4};
vector<int> v(a,a+3); //加3但是不包含3
此时v中的元素为1 2 3
元素访问
使用迭代器:(迭代器储存的是迭代的元素对应的地址)
vector<int>::iterator it=v.begin();
for(;it!=v.end();it++){
printf("%d\n",*it); //*取出地址中的元素
}
这里我们将int类型的vector的迭代器进行输出:
可以看到地址之间相隔4,因为是int类型 (4个字节,1个字节8bit,int为2^31,还有一位作为符号需要32bit,也就是4字节)
注:但是迭代的时候是it++而不是it+=4
或者可以类似于数组一样访问:(因为[]被重载了)
for(int i=0;i<=3;i++){
printf("%d\n",v[i]);
}
其他常用
v.empty() | 空返回1,非空返回0 |
v.begin() | 返回第一个元素的迭代器 |
v.end() | 返回指向容器最后一个元素所在位置后一个位置的迭代器,通常和 begin() 结合使用。 |
v.size() | 返回实际的元素个数 |
operator[ ] | 重载了 [ ] 运算符,可以向访问数组中元素那样,通过下标即可访问甚至修改 vector 容器中的元素。使用这个更方便 |
push_back() | 在序列的尾部添加一个元素。 |
pop_back() | 移出序列尾部的元素。 |
clear() | 移出所有的元素,容器大小变为 0。 |
v.insert() | 指定位置插入 v.insert(iterator, 4, 'C' ); |
更多参考: