c++STL

c++STL常用容器(1)

1 .迭代器(iterator)

  • stl几乎所有容器都支持迭代器
  • 迭代器的使用
    1
    2
    3
    4
    5
    6
    int main()
    {
    vector<int> nums(10,1);
    vector<int>::iterator it=nums.begain();//迭代器的声明,理解为 vector类中声明有iterator成员即可,还有begin()方法,返回对应的迭代器即可,还有end()方法,返回最后一个位置
    cout<<*it;//输出迭代器此时指向的位置的值
    }

2.数组转置(

  • reverse(v.begin(),v.end()); //数组转置

3 排序( sort)

  • sort(nums.begin(),nums.end(),function);//(默认是按升序排列,即从小到大)function参数选择排序方式,根据自己的选择来排序,比如,你希望一个二维数组可以根据第一维的大小来排序,就可以自己定义一个函数,是通过返回值的类型来判断谁排在前面
1
2
3
4
5
6
7
8
bool complare(int a,int b)//根据数组类型选择传入参数,如果是原数组是vector<vector<int>>,则写vector<int>

{

     return a>b;//值大的排前面
//return S.id<S1.id(id值小的结构体排前面)

}//从大到小排序,(返回值为true时的顺序为排序顺序)

3.字符串

  • 删除 (erase clear)
    +s.erase(it + 1,it + 4); //删除s[1]-s[3]**注意:不删除最后一个位置,并且使用的是迭代器it
    • clear()//删除全部
    • s.erase(it+3);//删除s[3]
  • 查找(find)
    • find找到string里面第一个要找到元素(char或者串),找到返回数组下标,找不到返回-1
    • int n = s1.find(‘e’);//fing和erase都是对象的方法
    • s1.find(‘h’,2); //从第二元素开始找
      • 字符串与数字之间的相互转换
        +
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//字符串转数字(c++风格)定义于头文件 <string> 
std::stod(string);//将字符串转换成double类型的
std::stoi(string);//将字符串转换成int类型的
std::stoll(string);//将字符串转换成long long类型的

//数字转字符串,对于浮点型,不稳定
std::to_string(num]);//将字符串变成数字、、对于浮点类型, std::to_string 可能产生不期待的结果,因为返回的字符串中的有效位数能为零,见示例。double f4 = 1e-40;
std::string f_str4 = std::to_string(f4); // 注意:返回 "0.000000"
double f5 = 123456789;
std::string f_str5 = std::to_string(f5);
to_string: 123456789.000000

//c语言风格 (stdio.h)
//使用sprintf(char*, "%.3f",num);
//数字变字符串
//如果成功,则返回写入的字符总数,不包括字符串追加在字符串末尾的空字符。如果失败,则返回一个负数。
char a[10]={0,0,0,'\0'};
        float t=(float)sum/1000;
        sprintf(a, "%.3f",t);
//同理还有scanf
  1. 字符数组与字符串的相互转换
  • 字符数组转字符串
1
2
3
4
5
6
7
8
9
10
11
12
13
14

#include<bits/stdc++.h>

using namespace std;

int main(){

char a[10]="123456789";

string s(&a[0],&a[9]);///起始位置 结束长度位置 +1

cout<<s<<endl;//可以更换数字下标运行看看

}
  • 字符串转字符数组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

#include<bits/stdc++.h>

using namespace std;

int main(){

string s="0123456789";

char op[15];

strncpy(op,s.c_str(),s.length()+1);///s.c_str() 字符强制转化为字符串函数

///长度必须加1,\0还占一个位置

for(int i=0;op[i];i++)

cout<<op[i]<<" ";

printf("\n");

}