ورود

View Full Version : مشکل با vector



emad_67
سه شنبه 22 خرداد 1386, 02:01 صبح
من این برنامه رو نوشتم ولی همش اخرین رشته ایی رو که وارد شده چاپ میکنه
مشکلش فکر میکنید کجاست


#include<iostream>
#include<vector>
using namespace std;
void main()
{
vector<char *>token;
char word[20];
for(int j=0;j<5;j++)
{
cin>>word;
token.push_back(word);
}
for(int i=0;i<token.size();i++)
cout<<token[i]<<endl;
}

someCoder
سه شنبه 22 خرداد 1386, 02:09 صبح
اینو ببین:

vector<char *>token;
char *word;
for(int j=0;j<5;j++) {
word = new char[20];
cin>>word;
token.push_back(word);
}

for(int i=0;i<token.size();i++){
cout<<token[i]<<endl;
delete token[i];
}

مشکلشو فکر کنم بفهمی :چشمک:
نفهمیدی بگو تا توضیح بدم

emad_67
سه شنبه 22 خرداد 1386, 08:55 صبح
والا من درست متوجه نشدم که چرا الزاما تخصیص حافظه مجدد نیازه چون اگه فرض رو بر این بزاریم که کلمه جدید در word قرار نگیرد این برنامه هم نباید جواب بده


#include<iostream>
using namespace std;
void main()
{
char word[20];
for(int j=0;j<5;j++)
{
cin>>word;
cout<<word;
}
}

saeid5977
سه شنبه 22 خرداد 1386, 15:21 عصر
سلام
فکر کنم مشکل اینه که تو push کردن آدرس ذخیره میشه نه کپی از اطلاعاتت . پس همونطور که جناب someCoder نوشتن باید جای جدیدی از حافظه رو بهش بدی.

emad_67
سه شنبه 22 خرداد 1386, 16:00 عصر
خیلی ممونون متوجه شدم

RED-C0DE
سه شنبه 22 خرداد 1386, 21:35 عصر
از string هم می تونی استفاده کنی :


#include<iostream>
#include<vector>
#include <string>
using namespace std;
void main()
{
vector<string>token;
string str1="";
for(int j=0;j<5;j++)
{
cin >> str1;
token.push_back(str1);
}

for(int i=0;i<token.size();i++)
cout<<token[i]<<endl;
}

someCoder
سه شنبه 22 خرداد 1386, 23:00 عصر
از string هم می تونی استفاده کنیراه اصولی تر هم همینه که میگی؛ من اونجوری نوشتم تا علت قضیه مشخص باشه.