oregon ha scritto:
Strano che l'esercizio te lo chieda, forse lo scopo è assegnare il risultato ad altro vettore nel main.
Mostra l'esercizio
Grazie per il suggerimento perché ci sarebbe voluto troppo tempo per arrivarci:
alla fine nel main dichiaro un vector r a cui assegno la funzione insert che restituisce un vettore.
Quindi bisognava passare il valore restituito della funzione ad un vectore nel main altrimenti mi sembra che venga perso tutto il lavoro della funzione...
Mi rimane solo il caso in cui il vettore é vuoto, non so se é giusto che dia errore oppure no.
#include <iostream>
#include <vector>
#include <string>
std::vector<int> insert(std::vector<int>, int, int);//aggiunge a v in posizione i il valore di val
int main()
{
/*std::vector<int> vuoto;
std::vector<int> r0;
r0 = insert (vuoto, 1, 0);
std::cout << "Inserimento in v vuoto: ";
for (int j = 0; j <= r0.size(); j++) std::cout << r0[j] << " ";
std::cout << std::endl;*/
std::vector<int> v = {0, 1};
std::vector<int> r;
r = insert (v, 0, 2);
std::cout << "Inserimento in testa: ";
for (int j = 0; j < r.size(); j++) std::cout << r[j] << " ";
std::cout << std::endl;
std::vector<int> v1 = {0, 1};
std::vector<int> r1;
r1 = insert (v1, 2, 2);
std::cout << "Inserimento in coda: ";
for (int j = 0; j < r1.size(); j++) std::cout << r1[j] << " ";
std::cout << std::endl;
std::vector<int> v2 = {0, 1};
std::vector<int> r2;
r2 = insert (v2, 1, 2);
std::cout << "Inserimento in posizione generica: ";
for (int j = 0; j < r2.size(); j++) std::cout << r2[j] << " ";
std::cout << std::endl;
std::vector<int> v3 = {0, 1};
std::vector<int> r3;
try{
r3 = insert (v3, 3, 2);
std::cout << "Inserimento in posizione non valida: ";
for (int j = 0; j < r3.size(); j++) std::cout << r3[j] << " ";
}
catch(std::string &err){
std::cout << err;
}
std::cout << std::endl;
}
std::vector<int> insert(std::vector<int> v, int i, int val)
{
std::string err = "Inserimento in posizione non valida";
if (i < 0 || i > v.size()) throw err;
v.push_back(v[v.size()-1]);
for (int j = v.size()-1; j >= i; j--)
{
v[j] = v[j-1];
if (j == i) v[j] = val;
}
return v;
}