Jump to content

Duplicar vector


Carlos Faria
 Share

Recommended Posts

Boas,

Estou perante o seguinte enunciado de um problema:

Escreva uma função em C++, designada por duplica, que dado um vector de inteiros e o seu comprimento, retorna um outro vector que corresponde à cópia exacta do vector passado.

int duplica(int v[], int len)
{

int *vector = new int[len];

for(int i=0; i<len;i++){
vector[i] = v[i];
cout << vector[i] << endl;
}

return 0;

delete vector;

}

Só que não obtenho o output/vector pretendido.. alguém sabe como posso resolver correctamente o problema?

Cumps

Link to comment
Share on other sites

apresenta o código de chamada da função

ps : essa função não está a retornar o vector criado

Exacto.. no início estava a fazer com return *vector , depois resolvi colocar apenas return 0, porque ia dar o mesmo, mas depois já não ia em conta ao problema..

já corrigi o delete, tinha me esquecido desse pormenor (ainda estou a iniciar-me em C++ e é o 1º problema que programo com memórias dinâmicas)

Aqui fica a minha solução..

#include <iostream>

using namespace std;

int duplica(int v[], int len);

int main()
{
int v[]={1,2,3,4};
int len = 4;
duplica(v,len);
}

int duplica(int v[], int len)
{
int *vector = new int[len];

for(int i=0; i<len;i++){
vector[i] = v[i];
cout << vector[i] << endl;
}

return *vector;
delete [] vector;
}

Só que ainda não estou a obter o pretendido..

Edited by Carlos Faria
Link to comment
Share on other sites

e o que te está a aparecer na consola ?

teres código após um return é o mesmo que contratares uma pessoa que more na Índia para te empurrar o carro quando este não pega à frente de tua casa ... será preciso dizer qual o resultado ?

Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

O output é

1
2
3
4

e devia de ser: {1,2,3,4}

não, o output é esso porque foi isso que disseste para apresentar:

cout                        // usar o stream standard de saida (normalmente o ecrã)
    <<                     // enviar para o stream descrito anteriormente
       vector[i]           // o valor do vector
                 <<        // enviar para o stream descrito anteriormente (o resultado da operação é o stream) 
                    endl;  // enviar o caracter terminador de linha

logo o output está correcto

então onde é mais aconselhável colocar o delete [] vector;? posso colocar no fim da função main ?

se estas a retornar a memória alocada para fora da função, sim, terás de chamar o delete[] na função main

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

pensa no que pretendes :

{       // <--- caracter inicial
valor  // <--- valor
,      // <--- separador
valor  // <--- valor

,      // <--- separador
valor  // <--- valor
}       // <--- caracter final
\n      // <--- fim de linha

achar que isso enquadrasse na tua linha de output ?

cout << [valor] << endl;
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

A solução é esta

int* duplica(int* v, int len)
{
int *vector = new int[len];

for(int i=0; i<len ; i++)
 vector[i] = v[i];

return vector;
}

claro que a solução ao enunciado é essa ...

mas com andavas pr'aqui a dizer que querias fazer um output pipi, o que interessa é saber se já sabes fazer-lo

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.