Forum: Vektorer

Forum huvudsida -> Programmering -> Vektorer

Sidor: 1

Till botten

Ponken 14:00 - 29:e Mars 2009 | Post #1
Medlem
Inlägg: 5


Skicka PM
Hej!

Jag är vid delen vektorer eller arrays nu och jag skulle gärna vilja veta lite konkreta exempel i program där man använder vektorer. Nu lär jag mig hur de används, men inte vad de används till. Just nu känns det lite "Vad ska jag ha det här till"?




Vitdom 18:56 - 29:e Mars 2009 | Post #2
Medlem
Inlägg: 71


Skicka PM
Det kan till exempel användas till ett koordinatsystem, pixlar. Sen skulle man ju också kunna använda en vektor för att lagra punkter i en polygon.

Sen kan man ju använda en vektor till char(pekare till char) som en sträng, som används i C/C++(csträng).

-------------------------



Senast redigerad 18:57 - 29:e Mars 2009


Metabolix 22:43 - 29:e Mars 2009 | Post #3
Medlem
Inlägg: 5


Skicka PM
Jag antar du menar nu std::vector.

En liten praktisk exempel: Gör en program där man kan skriva, modifiera och ta bort sina vänners adress, telefonnummer osv.

T.ex. så här:
  1. #include <string>
  2. #include <vector>
  3. #include <iostream>
  4. #include <limits>
  5. #include <fstream>
  6.  
  7. struct person;
  8. struct filperson {
  9. person& p;
  10. filperson(person& _p): p(_p) {}
  11. };
  12. struct person {
  13. std::string namn, adress, telefon;
  14. void fraga(std::istream& ist, std::ostream& ost);
  15. };
  16.  
  17. void person::fraga(std::istream& ist, std::ostream& ost)
  18. {
  19. std::string s;
  20. ost << "Namn [" << namn << "]: ";
  21. std::getline(ist, s);
  22. if (!s.empty()) namn = s;
  23.  
  24. ost << "Adress [" << adress << "]: ";
  25. std::getline(ist, s);
  26. if (!s.empty()) adress = s;
  27.  
  28. ost << "Telefon [" << telefon << "]: ";
  29. std::getline(ist, s);
  30. if (!s.empty()) telefon = s;
  31. }
  32.  
  33. std::ostream& operator << (std::ostream& ost, person& p)
  34. {
  35. ost << " Namn: " << p.namn << std::endl;
  36. ost << " Adress: " << p.adress << std::endl;
  37. ost << "Telefon: " << p.telefon << std::endl;
  38. return ost;
  39. }
  40.  
  41. std::istream& operator >> (std::istream& ist, filperson& fp)
  42. {
  43. std::getline(ist, fp.p.namn);
  44. std::getline(ist, fp.p.adress);
  45. std::getline(ist, fp.p.telefon);
  46. return ist;
  47. }
  48.  
  49. std::ostream& operator << (std::ostream& ost, filperson& fp)
  50. {
  51. ost << fp.p.namn << std::endl;
  52. ost << fp.p.adress << std::endl;
  53. ost << fp.p.telefon << std::endl;
  54. return ost;
  55. }
  56.  
  57. std::vector<person> db;
  58.  
  59. void las_fil(std::istream& f) {
  60. person p;
  61. filperson fp(p);
  62. while (f >> fp) {
  63. db.push_back(p);
  64. }
  65. }
  66. void las_fil(const char *f) {
  67. std::ifstream ifs(f);
  68. return las_fil(ifs);
  69. }
  70.  
  71. void skriv_fil(std::ostream& f) {
  72. for (std::vector<person>::iterator i = db.begin(); i != db.end(); ++i) {
  73. filperson fp(*i);
  74. f << fp;
  75. }
  76. }
  77. void skriv_fil(const char *f) {
  78. std::ofstream ofs(f);
  79. return skriv_fil(ofs);
  80. }
  81.  
  82. int las_nummer() {
  83. int i;
  84. bool ok;
  85. do {
  86. ok = (std::cin >> i);
  87. std::cin.clear();
  88. std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  89. } while (!ok);
  90. return i;
  91. }
  92.  
  93. int main() {
  94. las_fil("personer.txt");
  95. int menu;
  96. do {
  97. do {
  98. std::cout << "0. sluta" << std::endl;
  99. std::cout << "1. visa alla" << std::endl;
  100. std::cout << "2. skriva ny" << std::endl;
  101. std::cout << "3. ändra" << std::endl;
  102. std::cout << "4. ta bort" << std::endl;
  103. std::cout << "välja: ";
  104. menu = las_nummer();
  105. } while (menu < 0 || 4 < menu);
  106. switch (menu) {
  107. case 1: {
  108. for (std::vector<person>::size_type i = 0; i < db.size(); ++i) {
  109. std::cout << i << ".\n" << db[i] << std::endl;
  110. }
  111. break;
  112. }
  113. case 2: {
  114. person p;
  115. p.fraga(std::cin, std::cout);
  116. db.push_back(p);
  117. break;
  118. }
  119. case 3: {
  120. if (db.empty()) {
  121. std::cout << "Det finns ju inga!" << std::endl;
  122. break;
  123. }
  124. std::cout << "Vilken ska du ändra?" << std::endl << "nummer: ";
  125. std::vector<person>::size_type i = las_nummer();
  126. if (i < 0 || db.size() <= i) {
  127. std::cout << "Det finns inte person " << i << "!" << std::endl;
  128. break;
  129. }
  130. db[i].fraga(std::cin, std::cout);
  131. break;
  132. }
  133. case 4: {
  134. if (db.empty()) {
  135. std::cout << "Det finns ju inga!" << std::endl;
  136. break;
  137. }
  138. std::cout << "Vilken ska du ta bort?" << std::endl << "nummer: ";
  139. std::vector<person>::size_type i = las_nummer();
  140. if (i < 0 || db.size() <= i) {
  141. std::cout << "Det finns inte person " << i << "!" << std::endl;
  142. break;
  143. }
  144. db.erase(db.begin() + i);
  145. break;
  146. }
  147. }
  148. } while (menu != 0);
  149. skriv_fil("personer.txt");
  150. }


-------------------------



Senast redigerad 22:51 - 29:e Mars 2009


Sidor: 1

Forum huvudsida -> Programmering -> Vektorer
Atom feed

Du får inte posta i den här tråden | Till toppen