2011-07-17 29 views
37

quiero insertar un elemento en una posición específica de un vector, puedo sólo tiene que utilizar una asignación:insertar un elemento en una posición específica de un vector

// vec1 and 2 have the same length & filled in somehow 
vec1; 
vec2; 

vec1[i] = vec2[i] // insert vec2[i] at position i of vec1 

o tengo que usar insert():

vector<sometype>::iterator iterator = vec1.begin(); 

vec1.insert(iterator+(i+1), vec2[i]); 
+12

Tenga cuidado con su redacción aquí. 'Insertar' significará agregar un elemento en una ubicación y mover todos los elementos posteriores en un lugar en el vector (es decir, hacer crecer el vector en un elemento). Por otro lado, puede usar 'setting' para indicar que desea cambiar un elemento vectorial existente por un nuevo valor. –

+0

creo que lo que quiero es reemplazar lo que sea en vec1 [i] con vec2 [i]; y en mi caso vec [i] puede ser nulo, y quiero mantener las longitudes de vec1 y 2 de la misma manera; – daiyue

Respuesta

70
vec1[i] = vec2[i] 

establecerá el valor de vec1[i] al valor de vec2[i]. Nada está insertado. Tu segundo enfoque es casi correcto. En lugar de +i+1 que necesita sólo +i

v1.insert(v1.begin()+i, v2[i]) 
+1

Complejidad del tiempo O (n) ¿no? – ArmaGeddON

+1

@ArmaGeddON: para insertar, sí –

0

ver un ejemplo aquí: http://www.cplusplus.com/reference/stl/vector/insert/ ej .:



... 
vector::iterator iterator1; 

    iterator1= vec1.begin(); 
    vec1.insert (iterator1+i , vec2[i]); 

// This means that at position "i" from the beginning it will insert the value from vec2 from position i 

Su primer enfoque estaba reemplazando los valores de vec1 [i] con los valores de vec2 [i ]

10

Puede hacerlo utilizando at. Puede probar el siguiente ejemplo:

const size_t N = 20; 
std::vector<int> vec(N); 
try { 
    vec.at(N - 1) = 7; 
} catch (std::out_of_range ex) { 
    std::cout << ex.what() << std::endl; 
} 
assert(vec.at(N - 1) == 7); 

en cuenta que el método devuelve un atallocator_type::reference, que es este caso es un int&. Usar at es equivalente a asignar valores como vec[i]=....


Hay una diferencia entre at y insert ya que puede entenderse con el siguiente ejemplo:

const size_t N = 8; 
std::vector<int> vec(N); 
for (size_t i = 0; i<5; i++){ 
    vec[i] = i + 1; 
} 

vec.insert(vec.begin()+2, 10); 

Si ahora imprimimos vec obtendremos:

1 2 10 3 4 5 0 0 0 

Si , en cambio, hicimos vec.at(2) = 10, o vec[2]=10, obtendríamos

1 2 10 4 5 0 0 0 
Cuestiones relacionadas