Vraag : Help me begrijpen waarom één code beter is dan andere .....

Zowel codeer #1 en de code #2 bereikt het zelfde resultaat.  Ik heb hulp nodig begrijpend waarom men beter kan zijn dan other.
" codeBody "
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
CODE #1
#include 
#include 
#include 
#include 
#include 
#include 
#include 

het gebruiken van namespace norm;

struct StudentAttempt
{
   int. afstand;
   koord studentName;
};

bool cmpAttempts (recht verlaten StudentAttempt, StudentAttempt) {
   als (left.distance < right.distance) {
      ware terugkeer;
   }
   als anders (left.distance == right.distance) {
      als (left.studentName < right.studentName) {
         ware terugkeer;
      }
      anders
         valse terugkeer;
   }
   anders
      valse terugkeer;
}

isDistEqual bool (recht verlaten StudentAttempt, StudentAttempt) {
   terugkeer (left.distance == right.distance
      && left.studentName! = right.studentName);
}

size_t printAllEqual (const vector& v, const StudentAttempt& sa, stringstream& ss) {

   vector:: const_iterator i = v.begin ();
  size_t sz = 0;
  bool bFirst = waar;

  terwijl (I! = v.end ()) {

    als (isDistEqual (*i, sa)) {
    
      als (! bFirst) ss << „,“;
      ss << i->studentName;
      ++sz;
    }

    ++i; 
    bFirst = vals;
  }

  terugkeer sz;
}
 

int. leiding () {

   throwDist van StudentAttempt [] = {
      {50, „A“}, {22, „A“}, {16, „B“}, {44, „C“},
      {33, „D“}, {34, „E“}, {22, „F“}, {21, „G“},
      {49, „A“}, {5, „B“}, {2, „C“}, {22, „A“},
      {33, „B“}, {22, „C“}, {22, „D“}, {44, „E“},
   };

   set behandeld;

   int. len = sizeof (throwDist)/sizeof (throwDist [0]);
   vector dist (throwDist, throwDist + len);
   vector:: iterator het = dist.begin ();

   soort (dist.begin (), dist.end (), cmpAttempts);
   //unique (dist.begin (), dist.end (), cmpDist);


   voor (; het! = dist.end (); it++) {

      stringstream ss;

      pair:: iterator, bool> p = handled.insert (it->distance);

      als (! p.second) ga verder; reeds behandeld //

      als (0 < printAllEqual (dist, *it, ss)) 
        cout << setw (2) << (*it) .distance 
           << „voeten:  “ << (*it) .studentName << ss.str () << endl;
   }
}

CODE #2:
#include 
#include 
#include 
#include 
#include 
#include 
#include 

het gebruiken van namespace norm;

struct StudentAttempt
{
   int. afstand;
   koord studentName;
};

 bool cmpAttempts (recht verlaten StudentAttempt, StudentAttempt) {
   als (left.distance < right.distance) 
   {
      ware terugkeer;
   }
   als anders (left.distance == right.distance) 
   {
      als (left.studentName < right.studentName) 
	  {
         ware terugkeer;
      }
      anders
         valse terugkeer;
   }
   anders
      valse terugkeer;
}

int. leiding () {

   throwDist van StudentAttempt [] = {
      {50, „A“}, {22, „A“}, {16, „B“}, {44, „C“},
      {33, „D“}, {34, „E“}, {22, „F“}, {21, „G“},
      {49, „A“}, {5, „B“}, {2, „C“}, {22, „A“},
      {33, „B“}, {22, „C“}, {22, „D“}, {44, „E“},
   };

   set behandeld;

   int. len = sizeof (throwDist)/sizeof (throwDist [0]);
   vector dist (throwDist, throwDist + len);
   vector:: iterator het = dist.begin ();

   soort (dist.begin (), dist.end (), cmpAttempts);
   //unique (dist.begin (), dist.end (), cmpDist);

   int. x;
  voor (x=0; x < dist.size (); x++) 
   {
      stringstream ss;
      pair:: iterator, bool> p = handled.insert (dist [x] .distance);
	  int. z = 0;

      als (p.second)  
	  {
		  int. y;

     	  voor (y=0; y < dist.size (); y++) 
		  {
			  als (dist [x] .distance == dist [y] .distance && dist [x] .studentName! = dist [y] .studentName)
				{
 					  ss << „,“;
					  ss << dist [y] .studentName;
					  z += 1;
				}
		  }
	 }
	als (z > 0)
	  {
	   cout setw (2) dist [x] << „voeten .distance << <<: “ << dist [x] .studentName << ss.str () << endl;
	   z = 0;
	  }
   }
}

Antwoord : Help me begrijpen waarom één code beter is dan andere .....

Voor iterators… Het kan niet zo de eerste keer bekijken, maar iterators zijn een soort natuurlijker.  Wanneer u een probleem oplost, neigt u te denken in termen „alle elementen van…“, of „mathematisch voor alle elementen in…“ verwerk.  De enige conventionele manier te doen die een lijn te gebruiken is.  De tijdjelijn in c-Familie talen is te algemeen; u hebt doet sommige stappen op uw.  Voor lijn in c-Familie is de talen een kleine syntactische verbetering van het tijdje.  In andere programmeertalen, voor lijn is een getelde lijn.  Maar dit betekent ook dat u een index aan het geïndexeerdek element moet omzetten.  Wegens dat, neigt u vaak om de elementen in één of andere geïndexeerde structuur te zetten -- aan een serie of aan een vector.

Als u meer over het denkt, wat uw werkelijk behoefte een soort algemene lijn is die lijnen door alle elementen van een container zonder één of andere numerieke index noodzakelijk voor te bereiden.  Als u het proces verpersoonlijkt, zegt de arbeider aan een andere één „me de volgende“, en „geef me 3254ste“ niet geven.  Dit is precies welke iterators voor goed zijn.  Iterator is op de een of andere manier verbindend aan de container.  Dan kunt u in interne details (of het binnen wordt geïndexeerdg, of of het een verbonden structuur is) niet geinteresseerd zijn.  Met andere woorden, brengen iterators meer abstractie.

Jammer genoeg, zijn iterators nieuwer dan de kern van C++ en daarom er geen algemene lijn en syntaxis zijn om elk van dit duidelijker syntactisch te maken.  Zodra u aan betere sytax van de algemene lijn went (in andere talen, als in Python waar iterators bijna magisch werken, verborgen), mist u werkelijk die syntaxis in C++.  De nieuwe C++ norm gaat het verbeteren een beetje.
Andere oplossingen  
 
programming4us programming4us