c++ _STL学习 day1

c++中STL的一些学习

1.STL中三个核心组件

组件 描述
容器(Containers) 容器是用来管理某一类对象的集合。比如 deque、list、vector、map。
算法(Algorithm) 算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。
迭代器(Iterators) 迭代器用于遍历对象集合的元素。

2.Algorithm头文件

2.1 sort函数
用法:
sort(Array name;the last pointer)

//1. 其实相当于给两个参数,第一个是数组的头指针,第二个是数组的尾指针

//2.可以用于int,double,char等类型的各种数组(char本质是存储ascii码)

完整代码:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int a[]={9,8,7,6,5,4,3,2,1,0};
    int len= sizeof(a)/ sizeof(int);
    sort(a,a+len);
    for(int i=0;i<len;i++)
        cout << a[i] << " ";
    cout << endl;
    return 0;
}

3.STL--String

// 需要注意,iostream中就有string,但是要使用还需要string头文件

//#include <string>

3.1 直接赋值
    string s1="abcde";
    string s2="f";
    cout << s1 <<endl << s2 << endl;
3.2 构造函数
具体用法:
  • str(const char* ch) 直接赋值
  • str(size_t n,char ch) 赋值n个ch字符
  • str(char* ch,size_t n) 取ch指针的前n位
  • str(string& str,size_t index,size_t length) 从index开始取length位
  • str(string& str) 拷贝构造
完整代码:
string s1();  // si = ""
string s2("Hello");  // s2 = "Hello"
string s3(4, 'K');  // s3 = "KKKK"
string s4("12345", 1, 3);  //s4 = "234",即 "12345" 的从下标 1 开始,长度为 3 的子串

cout << s1 << endl << s2 << endl << s3 << endl << s4 << endl;
3.3 assign成员函数

可以对原有string类重新赋值

string s1("12345"), s2;
s3.assign(s1);  // s3 = s1
s2.assign(s1, 1, 2);  // s2 = "23",即 s1 的子串(1, 2)
s2.assign(4, 'K');  // s2 = "KKKK"
s2.assign("abcde", 2, 3);  // s2 = "cde",即 "abcde" 的子串(2, 3)
3.4 +=字符 / append成员函数

string类函数可以自加

+=用法:
string s="123";
s+="4"; //s此时即为“1234”
append用法
string s1(“123”);
s1.append(s2);  // s1 = "123abc"
3.5 获取一行数据
string s;
getline( cin , s ); //s为string的名字
cout << s ; //可以直接输出一个string类字符串
3.6 排序

也是利用sort函数

string s="987654321";
sort(s.begin(),s.end()); //s.begin相当于头迭代器,s.end是尾迭代器。
cout << s << endl;

//此处s.end()指向的是最后一个元素 ‘9’ 后面的一个地址,如果在数组中已越界。

//如果要打印最后一个元素 ‘9’ 则需要 cout << *--s.end() << endl ;

3.7 substr成员函数
string s='123456';
s=s.substr(2,4);   //即s='345'
cout << s << endl;
3.8 length成员函数

可直接用此函数求得string的长度

string s="987654321";
cout << s.length() << endl;
3.9 遍历string

三种,主要是传统遍历迭代器运用

string s="987654321";
//直接循环
for(int i=0;i<s.length();i++) cout << s[i];
cout << endl;
//迭代器法
for(string::iterator it =s.begin(); it!=s.end(); ++it) cout << *it;
cout << endl;
//简便的迭代器法
for(auto it=s.begin(); it!=s.end(); ++it) cout << *it;
cout << endl;

4. STL--Vector

//需要头文件#include <vector>

4.1 构造
vector<type> name(num_length,num_to_input); //有两个参数,第一个是长度,第二个是用来填充的数
example:
vector<int> v;//定义一个空vector
vector<int> v2(4);//定义一个4个大小的vector,初始为0
vector<int> v3(4,6);//定义一个4个大小的vector,初始为6
vector<int> v4{5,4,3,2,1};//可以直接用大括号输入数据
打印:
for(auto x:v3) cout<<x;         //依次打印每一个x
4.2 用at或[]获取元素
vector<int> v{5,4,3,2,1};
cout << v[4] << endl;                   //打印获得1
cout << v.at(4) << endl;            //打印获得1
4.3 常见函数
v.push_back(num_to_input);          //在vector组的后面用数字追加内容,该数字可以不止一个
v.resize(mount of num,num_to_input);    //重制长度,用后面的数字填充上去
v.erase(v.begin());     //删除第一个元素
v.erase(--v.end());     //删除最后一个元素

//因为vector是可变数组,在erase后,数组长度自动减1

例如
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);                         //此时vector为{‘1’,'2','3'};
v.erase(v.begin()+1);               //删除begin+1,即为删除2,此时数组长度由3变2,数组变为{'1','3'}
v.erase(v.begin()+1);               //此时begin+1指向3,删除后,数组长度由2变1,数组变为{'1'}
for(auto x:v) cout << x;
完整代码:
vector<int> v;
v.push_back(1);
v.push_back(2);
v.resize(5,0);
v.erase(v.begin());
v.erase(--v.end());
for(auto x:v) cout << x;
4.4 获取首尾元素
获取第一个元素
cout << v.front() << endl;
cout << &v[0] << endl;
cout << *v.begin() << endl;
获取最后一个元素
cout << v.back() << endl;
cout << v.[v.size-1];           //size是获取vector的大小
cout << *--v.end();
4.5 排序

利用sort函数进行排序,第三个参数为比较器,不写入默认为less (),即默认从小到大

vector<int> v{4,0,8,50,-4,3};
sort(v.begin(),v.end(),less<int>());        //从小到大排序
sort(v.begin(),v.end(),greater<int>());     //从大到小排序
for(auto x:v) cout << x << " ";
4.6 遍历
vector<int> v{1,2,3,4,5};
//传统方法
for(int i=0;i<v.size();i++)     cout << v[i] <<" " ;
cout << endl;
//迭代器法
for(vector<int>::iterator it=v.begin();it!=v.end() ;++it) cout << *it << " ";
cout << endl;
//简易迭代器法,c++11的特性
for(auto x:v)   cout << x << " " ;
cout << endl;

此处普通迭代器法一定要接<type>来表示它本身的类型,因为vector可以是各种类型的数组,例如int,char等

猜你喜欢

转载自www.cnblogs.com/miceputil/p/12305870.html