Conceptos básicos de C ++ STL

1. Razones para elegir el algoritmo de pincel C ++

  • 1. C ++ es rápido (C no es más rápido, Java es demasiado lento)
  • 2. C ++ tiene STL (que es STL) - biblioteca de clases muy fácil de usar
  • 3. Cómo usar STL para un algoritmo de cepillado eficiente
  • 4. Beneficios: algoritmo de cepillado, el costo de aprendizaje es extremadamente bajo
  • 5. Cómo pasar de C a C ++ (solo gramática básica a nivel de algoritmo de pincel)
俗话说:磨刀不误砍柴工
不会c++仍然可以做,但是效率低

2. Entrada y salida

C ++ retiene scanf e printf de C, y agrega cin y cout adicionales

Ejemplos

2.1. Entrada y salida en el programa C
int a;
scanf("%d",&a);
printf("%d",a);
2.2. Entrada y salida de C ++
int a;
cin>>a;
cout<<a;
2.3. Variables continuas de entrada y salida
int a,b,c;
cin>>a>>b>>c;
cout<<a<<b<<c;
2.4 Envuelva con gracia
cout<<1;
cout<<endl;
cout<<2;
cout<<3<<endl<<endl;

Beneficios:

1. Escribe mucho menos

2. Variables continuas de entrada y salida

3. Saltos de línea elegantes

注意:cin、cout比scanf、printf慢,有时候刷算法超时,可能因为使用了cin、cout

输入输出的数量(>1000)特别多,刷算法用cin,cout容易超时

3. STL (Biblioteca de plantillas estándar) y archivos de encabezado de algoritmo

STL es una colección de "contenedores". Estos "contenedores" son listas, vectores, conjuntos, mapas, etc. STL también es una colección de algoritmos y otros componentes.

algoritmo es algunas funciones de algoritmo heredadas del contenedor

función de clasificación

Concepto: iterador entendido como un puntero

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    int a[]={2,1,5,0,-1,5,9};
    sort(a,a+7);
    for(int i=0;i<7;i++)
        cout<<a[i]<<" ";
    cout<<endl;
    system("pause");
    return 0;
}

4 、 STL —— cadena (*)

Concepto: equivalente a la encapsulación de char *, entendido como una cadena

4.1. Simple de usar
/**C中定义字符串以及打印*/
char *ch="asdkajbf";
for(int i=0;ch[i]!='\0';i++) cout<<*(ch+i);
/**C++中*/
string s="ssadaffw";
cout<<s<<endl;
4.2. Obtener una línea de cuerdas

Quiero obtener una linea de cuerda

hello world

C:

scanf("%s",ch);//1.仅获取一个单词,空格结束 2.ch[100]得设置初始大小

C ++:

string s;
getline(cin,s);//获取一行数据
cout<<s;
4.3. + = Operador

+ = Para cadenas, los caracteres son válidos, los números se convertirán a códigos asc

string s;
s+="hello";
s+=" world";
s+='5';
s+=10;//10对应的asc码是换行
int a=5;//想把a加入字符串
s+=(a+'0');
cout<<s;
4.4. Clasificación (usando algoritmo)
string s="5418340";
sort(s.begin(),s.end());
cout<<s;
4.5.erase función
/**begin是头迭代器,end是尾迭代器*/
string s="5418340";
s.erase(s.begin());//删除第一个
s.erase(--s.end());//删除最后一个
cout<<s;
4.6 Función substr
/**begin是头迭代器,end是尾迭代器*/
string s="5418340";
s=s.substr(1,3);//取418,取索引为1,往后截断3个
s=s.substr(1,-1);//索引为1,截断到最后
cout<<s;
4.7. Bucle (3 tipos)

1.para bucle

string s="5418340";
for(int i=0;i<s.length();i++) cout<<s[i];

2. Iterador

for(string::iterator it=s.begin();it!=s.end();it++) cout<<*it;

3. Simplificación del iterador

for(auto it=s.begin();it!=s.end();it++) cout<<*it;

4. Use las nuevas funciones de C ++ 11 para el bucle

for(auto x:s) cout<<x;

5 、 STL —— vector (*)

Concepto: el vector es equivalente a una matriz, y el tipo de plantilla es equivalente al contenido almacenado

Construcción 1.vector

vector<int> v;//定义一个空vector
vector<int> v2(4);//定义一个4个大小的vector,初始为0
vector<int> v3(4,6);//定义一个4个大小的vector,初始为6
vector<int> v{1,2,3,4,5};//定义一个vector,数字为1,2,3,4,5
for(auto x:v3) cout<<x;

2. Use en o [] para obtener el elemento

vector<int> v{1,2,3,4,5};
cout<<v[1];//取索引为1的
cout<<v.at(2);//取索引为2的

3. Método

  • contenido adicional push_back
vector<int> v;
v.push_back(5);
v.push_back(5);
v.push_back(5);
v.push_back(5);
v.push_back(6);
for(auto x:v) cout<<x;
  • redimensionar
v.resize(10);//不赋值默认为0
  • borrar elemento de eliminación, la complejidad es O (n)
v.erase(v.begin());//删除第一个元素
v.erase(--v.end());//删除最后一个元素
  • Obtenga el primer elemento, obtenga el último elemento
/**获取第一个元素*/
cout<<v.front();
cout<<v[0];
cout<<*v.begin();
/**获取最后一个元素*/
cout<<v.back();
cout<<v[v.size()-1];//size是获取大小
cout<<*--v.end();

4. Ordenar

El tercer parámetro es el comparador, no escrito, el valor predeterminado es menor ()

vector<int> v{5,1,2,5,4,0,-1};
sort(v.begin(),v.end(),less<int>());//从小到大
sort(v.begin(),v.end(),greater<int>());//从大到小排序
for(auto x:v) cout<<x;

5. ciclo

vector<int> v{5,1,2,5,4,0,-1};
for(int i=0;i<v.size();i++) cout<<v[i];//for循环
cout<<endl;
for(vector<int>::iterator it=v.begin();it!=v.end();it++) cout<<*it;//迭代器循环
cout<<endl;
for(auto it=v.begin();it!=v.end();it++) cout<<*it;//迭代器简化循环
cout<<endl;
for(auto x:v) cout<<x;//c++11新特性

6 、 STL —— stack (*)

Concepto: pila

  • Estructura
stack<int> s;
  • presione 、 pop 、 tamaño 、 vacío
  • empujar un elemento sobre la pila
  • pop muestra un elemento, pop no tiene valor de retorno
  • top Toma el elemento superior de la pila
  • tamaño Ver la cantidad de elementos
s.push(2);
s.push(3);
cout<<s.top()<<endl;
s.pop();
cout<<s.top()<<endl;
cout<<s.size()<<endl;
  • Conversión hexadecimal (decimal a binario)
int itob(int decimal){
    stack<int> s;int res=0;
    while(decimal!=0){
        s.push(decimal%2);
        decimal/=2;
    }
    while(!s.empty()){
        res=res*10+s.top();
        s.pop();
    }
    return res;
}
  • Palabras inversas (expandir sstream, stoi, itoa)

Ingrese una cadena de caracteres e imprima las cadenas en orden inverso

: : Hola mundo, mi nombre es Steve Yu

: : Yu steve se llama hola a mi mundo

#include <iostream>
#include <stack>
#include <sstream>

using namespace std;

int main(){
    string str;
    stack<string> s;
    getline(cin,str);
    stringstream ss;
    ss<<str;
    while(ss>>str)
        s.push(str);
    while(!s.empty()){
        cout<<s.top();
        s.pop();
        if(s.size()!=0) cout<<" ";
    }
    return 0;
}
  • Cadena para numerar

Método 1:

 string s="1234";
 int i;
 stringstream ss;
 ss<<s;
 ss>>i;
 cout<<i;

Método 2:

string s="1234";
int i=stoi(s);
cout<<i;
  • Número a cadena

Método 1:

int a=1234;
string out;
stringstream ss;
ss<<a;
ss>>out;
cout<<out<<endl;

Método 2: (c ++ 11)

int a=1234;
cout<<to_string(a)<<endl;

7 、 STL —— cola

Concepto: cola

  • Estructura
queue<int> q;
  • hacer retroceder
q.push(5);
q.push(6);
cout<<q.front()<<endl;
q.pop();
cout<<q.front()<<endl;
cout<<q.size()<<endl;

8 、 STL —— mapa (par de mapas desordenados)

Concepto: mapeo (el mapa es una tabla de árbol, el mapa sin ordenar es una tabla hash)

  • mapa
map<int,int> m;//有序的,树状结构(底层)
m[6]=3;
m[5]=8;
m[4]=9;
for(auto it=m.begin();it!=m.end();it++)
    cout<<it->first<<" "<<it->second<<endl;
for(auto tmp:m){
    cout<<tmp.first<<" "<<tmp.second<<endl;
}
  • mapa_desordenado
unordered_map<int,int> m;//无序的,哈希结构(底层)
m[6]=3;
m[5]=8;
m[4]=9;
for(auto it=m.begin();it!=m.end();it++)
    cout<<it->first<<" "<<it->second<<endl;
for(auto tmp:m){
    cout<<tmp.first<<" "<<tmp.second<<endl;
}
  • Uso de pares (mapa a vector para ordenar)
bool cmp(pair<int,int> a,pair<int,int> b){
    return a.first>b.first;
}
int main(){
    unordered_map<int,int> m;//无序的,哈希结构(底层)
    m[6]=3;
    m[5]=8;
    m[4]=9;
    vector<pair<int,int>> v(m.begin(),m.end());
    sort(v.begin(),v.end(),cmp);
    for(auto tmp:v){
        cout<<tmp.first<<tmp.second<<endl;
    }
    return 0;
}

9 、 conjunto (conjunto no ordenado)

Concepto: colección

  • Conteo de aplicaciones, deduplicación
set<int> s;//树状结构,有序
unordered_set<int> s2;//哈希结构,无序,快
s.insert(3);
s.insert(4);
s.insert(4);
s.insert(4);
cout<<s.size()<<endl;
for(auto tmp:s)
    cout<<tmp<<" ";
cout<<endl;
for(auto it=s.begin();it!=s.end();it++)
    cout<<*it<<" ";
cout<<endl;

10, STL es -

Concepto: cola doble

deque<int> d;
// 4 9 1 2
d.push_back(1);
d.push_back(2);
d.push_front(9);
d.push_front(4);
d.pop_back();
d.pop_front();
for(auto tmp:d) cout<<tmp<<endl;
for(auto it=d.begin();it!=d.end();it++) cout<<*it<<endl;
  • Ordenar
sort(d.begin(),d.end(),greater<int>());

11 、 STL —— lista

Concepto: lista doblemente vinculada

list<int> li;
li.push_back(6);
li.push_front(5);
li.emplace_front(9);
li.emplace_back(10);
li.insert(++li.begin(),2);
for(auto tmp:li) cout<<tmp<<endl;
for(auto it=li.begin();it!=li.end();it++) cout<<*it<<endl;

12. Documentación

Inglés

http://www.cplusplus.com/reference/stl/

Chino:

http://c.biancheng.net/stl/map/
Publicado 13 artículos originales · elogiado 5 · visitas 459

Supongo que te gusta

Origin blog.csdn.net/why18767183086/article/details/104174540
Recomendado
Clasificación