Jump to content
Carlos Faria

Duplicar vector

Recommended Posts

Carlos Faria

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

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

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

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
dipo

Como já foi dito não estás a retornar nenhum vector...

Tens de fazer algo do género

tipo_da_função função_copiar(argumentos)

{

Operações para copiar

Devolve vector

}

Edited by dipo

Share this post


Link to post
Share on other sites
HappyHippyHippo

já agora, a chamada de libertação de memória está incorrecta:

delete [] vector; // <- maneira correcta de libertar a memória de uma array

Edited by HappyHippyHippo
  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Carlos Faria

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

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
Carlos Faria

O output é

1
2
3
4

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

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

Cumps

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
Carlos Faria

Eu percebo o Output... o problema aqui é que não consigo chegar ao pretendido e o que mostrei foi a minha tentativa que não resultou com sucesso..

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
Carlos Faria

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

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
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

×
×
  • 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.