#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
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;
}
};