mboost-dp1

skrivning direkte ind i vector!


Gå til bund
Gravatar #1 - Qw_freak
10. jan. 2010 16:49
Hey, hvad skal jeg skrive i c++ for at skrive direkte ind i en vector?

jeg har en vector:

vector<char> name;

jeg vi gerne fylde hvert bogstav ind på en plads via cin!?


fx: cin >> name; (men det kan man ikke)
Gravatar #2 - arne_v
10. jan. 2010 16:55
#1

Var det ikke bedre at bruge string !?

Du bør kunne læse ind i name[i], men du får problemer med længden.
Gravatar #3 - Qw_freak
10. jan. 2010 16:57
det er meningen vi skal bruge vector! så kan ikke bruge string!

Hvad ville du skrive så?

cin >> name[i]; ??
Gravatar #4 - Windcape
10. jan. 2010 18:02
name.push_back('a')
name.push_back('b')
name.push_back('c')
name.push_back('d')

Så du skal læse ind i en buffer, før du tilføjer til din collection.
Gravatar #5 - arne_v
11. jan. 2010 00:13
#3

Man kan også spørge om hvordan man slår sig i hovedet med en hammer så det gør mindst ondt.

vector<char> duer ikke.

Første forsøg:


#include <iostream>
#include <vector>

using namespace std;

int main()
{
vector<char> v(4, ' ');
cout << "Enter 4 letters and return: ";
for(int i = 0; i < 4; i++)
{
cin >> v[i];
}
for(int i = 0; i < v.size(); i++)
{
cout << v[i];
}
cout << endl;
return 0;
}


Andet forsøg:


#include <iostream>
#include <vector>
#include <cstring>

using namespace std;

int main()
{
vector<char> v;
cout << "Enter some letters and return: ";
char buf[1000];
cin.getline(buf, sizeof(buf));
for(int i = 0; i < strlen(buf); i++)
{
v.push_back(buf[i]);
}
for(int i = 0; i < v.size(); i++)
{
cout << v[i];
}
cout << endl;
return 0;
}


Sammenlign med:


#include <iostream>
#include <string>

using namespace std;

int main()
{
cout << "Enter some letters and return: ";
string line;
getline(cin, line);
cout << line << endl;
return 0;
}
Gravatar #6 - JacobN
11. jan. 2010 18:28
Jeg er 100 % enig med arne_v, men jeg vil dog lige sige at det kan gøres nemmere.

Om det så er pænt er noget helt andet:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
vector<char> v( 1000, '\0' );
cout<<"Enter some letters and return: ";
cin.getline( &v.front(), v.size() );
cout<<&v.front()<<endl;
return 0;
}


Om end v ikke automatisk kan resize sig selv i tilfælde af at v er for kort, hvorimod en string kan hvis brugt sammen med std::getline.
Gravatar #7 - arne_v
12. jan. 2010 17:12
#6

Ah - man kan stjæle en T* med &vector.front().
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login