Detalles vectoriales de C ++ (siempre lo olvido para mi propio uso)

#incluir
Al igual que las matrices, puede acceder a elementos en forma de subíndice [i], pero recuerde que si no le asigna espacio al comienzo de la asignación, no puede asignar valores en forma de subíndice [i], porque en este momento var [i] Si no existe, puede usar insert (puntero de posición, valor) o directamente arr.push_back (valor).

1. Sintaxis básica de vector:

definición:vector arr;
Definición:vector :: iterador it = arr.begin ();
Nuevo elemento:valor
// Apunta al primer elemento del vector arr.

1.push_back agrega un dato al final de la matriz
arr.push_back (valor);

2.pop_back elimina los últimos datos de la matriz
arr.pop_back (); Recuerda que no hay valor de retorno, el último elemento será destruido directamente

3.Al obtener los datos de la posición numerada
value = arr.at (key) reference at (int pos) devuelve la referencia del elemento en pos

4.comience a obtener el puntero del cabezal de la matriz
es = arr.begin ()

5.end obtiene el puntero del último elemento de la matriz + 1
it = arr.end () devuelve un puntero a la siguiente posición del último elemento

6.front obtiene una referencia al cabezal de la matriz
value = arr.front () obtiene directamente la referencia del primer elemento del vector

7.back obtiene la referencia del último elemento de la matriz
value = arr.back () obtiene directamente la referencia del último elemento del vector

8.max_size obtiene el tamaño máximo del vector

9.capacidad El tamaño de la asignación de vectores actual

10.size El tamaño de los datos utilizados actualmente.
longitud = tamaño de arr. ()

11.resize cambia el tamaño de los datos usados ​​actualmente. Si es más grande que los datos usados ​​actualmente, complete el valor predeterminado

12.reserva para cambiar el tamaño del espacio asignado por el vecotr actual

13.Eliminar eliminar el elemento de datos señalado por el puntero
arr.erase (es)

14.clear borrar el vector actual

15.rbegin devuelve el puntero de inicio después de que se invierte el vector (de hecho, el final original-1)

16.rend devuelve el puntero final de la estructura inversa del vector (de hecho, el comienzo-1 original)

17.vacío juzga si el vector está vacío
arr.empty ();

18.intercambiar datos con otro vector

2. Atraviesa un vector unidimensional:

for(vector<int>:: iterator it=arr.begin();it!=arr.end();it++)
{
    
    
    cout<<*it<<" ";
}
或者可以采用数组下标遍历的形式
for(int i=0;i<arr.size()-1;i++)
{
    
    
    cout<<arr[i]<<" ";
}

Atraviesa un vector bidimensional

//在这里arr是二维向量;
vector<vector<int>> arr;
for(vector<vector<int>>:: iterator iter=arr.begin();iter!=arr.end();iter++)
{
    
    
    vector<int> temp=*iter;
    for(vector<int>:: iterator it=temp.begin();it!=temp.end();it++)
    {
    
    
        cout<<*it<<" ";
    }
    cout<<endl;
}
//或者也可以直接用遍历下标的形式
for(int i=0;i<arr.size();i++)
{
    
    
    vector<int> temp=arr[i];
    for(int j=0;j<temp.aize();j++)
    {
    
    
        cout<<temp[j]<<" ";
    }
    cout<<endl;
}

3. Eliminar elementos:

//删除最后一个;
arr.pop_back();

//删除指针指向的一个;
arr.erase(it);

//删除指定的一段;
vector<int>:: iterator first, last;
arr.erase(first,last);
//其中[first,last)均为指针 

4. Agrega elementos

(1)
arr.insert(it,value);  //表示在it指向的元素之前插入value;

(2)
arr.push_back(value);  //直接在arr最后插入value;

5. Atravesar:

reference at (int pos): devuelve la referencia del elemento en pos
reference front (): devuelve la referencia del primer elemento
reference back (): devuelve la referencia del último elemento
iterador begin (): devuelve el puntero de cabeza del vector, apuntando al primer elemento
iterador end (): Devuelve el puntero de cola del vector, apunta a la siguiente posición del último elemento del vector
reverse_iterator rbegin (): iterador inverso, apunta al último elemento
reverse_iterator rend (): reversa iterador, apunta a la posición antes del primer elemento

6. Función de juicio

bool empty () const: determina si el vector está vacío, si está vacío, no hay elementos en el vector

7. Función de tamaño

int size () const: devuelve el número de elementos en el vector
int capacidad () const: devuelve el valor máximo del elemento que el vector actual puede contener
int max_size () const: devuelve el número máximo permitido de elementos vectoriales

Una pregunta

Ejemplo:
Descripción del título
Diseñe la estructura de la caché LRU. El tamaño de la estructura se determina durante la construcción. Suponiendo que el tamaño es K, tiene las siguientes dos funciones
establecidas (clave, valor): insertar el registro (clave, valor) en la estructura
get (clave): Devuelve el valor correspondiente a la clave
[Requisito]
La complejidad temporal de los métodos set y get es O (1)
Una vez que se produce una operación set u get de una determinada clave, se considera que el registro de esta clave ser el más utilizado.
Cuando el tamaño de la caché exceda K, elimine el registro utilizado con menos frecuencia, es decir, el conjunto más antiguo o get.
Si opt = 1, los siguientes dos enteros x, y representan el conjunto (x, y).
Si opt = 2, el siguiente entero x representa get (x). Si x no ha aparecido o se ha eliminado, devuelve -1
para cada operación 2, da salida a una respuesta

Inserte la descripción de la imagen aquí

class Solution {
    
    
public:
    /**
     * lru design
     * @param operators int整型vector<vector<>> the ops
     * @param k int整型 the k
     * @return int整型vector
     */
    void set(int key,int value,vector<vector<int>> &lru,int k)
    {
    
    
        vector<int> a;
        a.push_back(key);
        a.push_back(value);
        if(lru.size()==k)
        {
    
    
            lru.pop_back();
            lru.insert(lru.begin(), a);
        }
        else if(lru.size()<k)
        {
    
    
            lru.insert(lru.begin(), a); //插入最前面
        }
    }
    
    int get(vector<vector<int>> &lru,int key)  //存在并且使用时候要将其放在最开始的位置;
    {
    
    
        vector<vector<int>>::iterator iter=lru.begin();
        vector<int> temp;
        for(iter=lru.begin();iter!=lru.end();iter++)
        {
    
    
            temp=*iter;
            if(temp[0]==key)
            {
    
    
                lru.erase(iter);
                lru.insert(lru.begin(), temp);
                return temp[1];
                break;
            }
            else
                continue;
        }
        return -1;
    }
    
    vector<int> LRU(vector<vector<int> >& operators, int k) {
    
    
        // write code here
        vector<int> output;
        int num=0;
        vector<vector<int>> lru;   //用于保存<=k个的当前缓存
        vector<vector<int>>::iterator iter;
        vector<int> temp;
        for(iter=operators.begin();iter!=operators.end();iter++)
        {
    
    
            temp=*iter;
            if(temp[0]==1)  //set
            {
    
    
                set(temp[1],temp[2],lru, k);
            }
            else if(temp[0]==2)  //get
            {
    
    
                output.push_back(get(lru,temp[1]));
            }
        }
        return output;
    }
};

Supongo que te gusta

Origin blog.csdn.net/qq_43978754/article/details/115231956
Recomendado
Clasificación