Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ Π² basic_string Ρ ΡΠ°Π½ΡΡΡΡ Π² Π±ΡΡΠ΅ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΅Π΄ΠΈΠ½ΡΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠΌ ΠΏΠ°ΠΌΡΡΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°. ΠΡΠΎΡ Π±ΡΡΠ΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΡΡΡΠΎΠΊΠΎΠΉ, ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΠΊΠΈΠΉ ΡΠ°Π·ΠΌΠ΅Ρ, ΠΈ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π² ΡΡΡΠΎΠΊΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΎΠ½ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡ ΠΏΡΠ΅Π΄Π΅Π» Π΅Π³ΠΎ Π΅ΠΌΠΊΠΎΡΡΠΈ. ΠΠΎΠ³Π΄Π° ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, Π±ΡΡΠ΅Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ Π±ΡΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΊΠΎΠΏΠΈΡΡΡΡΡΡ ΠΈΠ· ΡΡΠ°ΡΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ° Π² Π½ΠΎΠ²ΡΠΉ, ΠΈ ΡΡΠ°ΡΡΠΉ Π±ΡΡΠ΅Ρ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ.
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π±ΡΡΠ΅ΡΠ° (Π½Π΅ ΡΠΈΡΠ»ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π² Π½Π΅ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΡΡ, Π° Π΅Π³ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ) ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° capacity. ΠΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΡΡΠ½ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΅ΠΌΠΊΠΎΡΡΡ ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π½Π΅Π½ΡΠΆΠ½ΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠΉ Π±ΡΡΠ΅ΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ reserve ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΠΉΡΠ΅ Π΅ΠΌΡ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π±ΡΡΠ΅ΡΠ°. Π’Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π±ΡΡΠ΅ΡΠ°, ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° max_size. ΠΡΠΎ Π²ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΡΠ°ΡΡ ΠΎΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ 4.9, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
ΠΡΠΈΠΌΠ΅Ρ 4.9. ΠΠ»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ ΠΈ Π΅Π΅ Π΅ΠΌΠΊΠΎΡΡΡ
#include <string>
#include <iostream>
using namespace std;
int main() {
string s = "";
string sr = "";
sr.reserve(9000);
cout << "s.length = " << s.length( ) << '\n';
cout << "s.capacity = " << s.capacity( ) << '\n';
cout << "s.max.size = " << s.max_size() << '\n';
cout << "sr.length = " << sr.length() << '\n';
cout << "sr.capacity = " << sr.capacity() << '\n';
cout << "sr.max_size = " << sr.max_size() << '\n';
for (int i = 0; i < 10000; ++i) {
if (s.length() == s.capacity()) {
cout << "s Π΄ΠΎΡΡΠΈΠ³Π»Π° Π΅ΠΌΠΊΠΎΡΡΠΈ " << s.length() << ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅... \n";
}
if (sr.length() == sr.capacity()) {
cout << "sr Π΄ΠΎΡΡΠΈΠ³Π»Π° Π΅ΠΌΠΊΠΎΡΡΠΈ " << sr.length() << ", ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅...\n";
}
s += 'x';
sr += 'x';
}
}
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Visual C++ 7.1 Π²ΡΠ²ΠΎΠ΄ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ.
s.length = 0
s.capacity = 15
s.max_size = 4294967294
sr.length = 0
sr.capacity = 9007
sr.max_size = 4294967294
s Π΄ΠΎΡΡΠΈΠ³Π»Π° Π΅ΠΌΠΊΠΎΡΡΠΈ 15, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅...
s Π΄ΠΎΡΡΠΈΠ³Π»Π° Π΅ΠΌΠΊΠΎΡΡΠΈ 31, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅...
s Π΄ΠΎΡΡΠΈΠ³Π»Π° Π΅ΠΌΠΊΠΎΡΡΠΈ 47, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅...
s Π΄ΠΎΡΡΠΈΠ³Π»Π° Π΅ΠΌΠΊΠΎΡΡΠΈ 70, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅...
s Π΄ΠΎΡΡΠΈΠ³Π»Π° Π΅ΠΌΠΊΠΎΡΡΠΈ 105, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅...
s Π΄ΠΎΡΡΠΈΠ³Π»Π° Π΅ΠΌΠΊΠΎΡΡΠΈ 157, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅...
s Π΄ΠΎΡΡΠΈΠ³Π»Π° Π΅ΠΌΠΊΠΎΡΡΠΈ 235, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅...
s Π΄ΠΎΡΡΠΈΠ³Π»Π° Π΅ΠΌΠΊΠΎΡΡΠΈ 352, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅...
s Π΄ΠΎΡΡΠΈΠ³Π»Π° Π΅ΠΌΠΊΠΎΡΡΠΈ 528, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅...
s Π΄ΠΎΡΡΠΈΠ³Π»Π° Π΅ΠΌΠΊΠΎΡΡΠΈ 792, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅...
s Π΄ΠΎΡΡΠΈΠ³Π»Π° Π΅ΠΌΠΊΠΎΡΡΠΈ 1188, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅...
s Π΄ΠΎΡΡΠΈΠ³Π»Π° Π΅ΠΌΠΊΠΎΡΡΠΈ 1782, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅...
s Π΄ΠΎΡΡΠΈΠ³Π»Π° Π΅ΠΌΠΊΠΎΡΡΠΈ 2673, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅...
s Π΄ΠΎΡΡΠΈΠ³Π»Π° Π΅ΠΌΠΊΠΎΡΡΠΈ 4009, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅...
s Π΄ΠΎΡΡΠΈΠ³Π»Π° Π΅ΠΌΠΊΠΎΡΡΠΈ 6013, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅...
sr Π΄ΠΎΡΡΠΈΠ³Π»Π° Π΅ΠΌΠΊΠΎΡΡΠΈ 9007, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅...
s Π΄ΠΎΡΡΠΈΠ³Π»Π° Π΅ΠΌΠΊΠΎΡΡΠΈ 9019, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅...
ΠΠ΄Π΅ΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎ, ΡΡΠΎ Π±ΡΡΠ΅Ρ ΡΡΡΠΎΠΊΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π² Π½Π΅Π³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΡΠ»ΠΈ Π±ΡΡΠ΅Ρ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ»ΠΎΠ½ (Ρ.Π΅. Π΄Π»ΠΈΠ½Π° = Π΅ΠΌΠΊΠΎΡΡΡ), Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ Π±ΡΡΠ΅Ρ, ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΈ Π½ΠΎΠ²ΡΠΉ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» (ΠΈΠ»ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ) ΠΊΠΎΠΏΠΈΡΡΡΡΡΡ Π² ΡΡΠΎΡ Π½ΠΎΠ²ΡΠΉ Π±ΡΡΠ΅Ρ, s Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡΡΡ Ρ Π΅ΠΌΠΊΠΎΡΡΠΈ 15 (Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°), Π° Π·Π°ΡΠ΅ΠΌ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π½Π° 50%.
ΠΡΠ»ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡΡΡ Ρ ΠΎΡΡ Π±Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, Π΄Π»Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΡΠ»Π° ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π±ΡΡΠ΅ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ reserve. Π’Π°ΠΊΠΆΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡ Ρ ΠΈΠΌΠ΅ΡΡΠ΅ΠΉΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊ ΠΎΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ.
ΠΡΡΠ°ΡΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ·Π½Π°ΡΡ, ΠΏΡΡΡΠ° Π»ΠΈ ΡΡΡΠΎΠΊΠ°, Π½Π΅ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΠΉΡΠ΅ Π΅Π΅ ΡΠ°Π·ΠΌΠ΅Ρ Ρ Π½ΡΠ»Π΅ΠΌ, Π° ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ empty. ΠΡΠΎ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΡΡΠΈΠ½Ρ, Π΅ΡΠ»ΠΈ Π΄Π»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ ΡΠ°Π²Π½Π° Π½ΡΠ»Ρ.
4.5. ΠΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ (ΡΠ΅Π²Π΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ) ΡΡΡΠΎΠΊΡ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅Π§ΡΠΎΠ±Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡ ΡΡΡΠΎΠΊΡ Β«Π½Π° ΠΌΠ΅ΡΡΠ΅Β», Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½ ΡΡΠ½ΠΊΡΠΈΠΈ reverse ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° <algorithm>:
std::reverse(s.begin(), s.end());
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅reverse ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ: ΠΎΠ½Π° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ Π΅ΠΉ, ΡΠ°ΠΊ, ΡΡΠΎ Π΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π° ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΌΡ. ΠΡΠ΅ΠΌΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ, Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π΄Π»ΠΈΠ½Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°.
Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΡ Π² Π΄ΡΡΠ³ΡΡ ΡΡΡΠΎΠΊΡ, Π½ΠΎ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ΅Π²Π΅ΡΡΠΈΠ²Π½ΡΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ, ΠΊΠ°ΠΊ Π·Π΄Π΅ΡΡ:
std::string s = "Los Angeles";
std::string rs;
rs.assign(s.rbegin(), s.rend());
rbegin ΠΈ rend Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ΅Π²Π΅ΡΡΠΈΠ²Π½ΡΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ. Π Π΅Π²Π΅ΡΡΠΈΠ²Π½ΡΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ Π²Π΅Π΄ΡΡ ΡΠ΅Π±Ρ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΠΎΠ½ΠΈ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. rbegin Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, a rend Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ²ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ. ΠΡΠΎ Π² ΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΡΠΎΠΌΡ, ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ begin ΠΈ end.
ΠΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ Π»ΠΈ Π²Ρ ΠΎΠ±ΡΠ°ΡΠ°ΡΡ ΡΡΡΠΎΠΊΡ? Π‘ ΠΏΠΎΠΌΠΎΡΡΡ rbegin ΠΈ rend Π΄Π»Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ»ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠ΅ Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ². Π Π΅ΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠΎΠΈΡΠΊ Π² ΡΡΡΠΎΠΊΠ΅, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ rfind, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π΅Π»Π°Π΅Ρ ΡΠΎ ΠΆΠ΅, ΡΡΠΎ ΠΈ find, Π½ΠΎ Π½Π°ΡΠΈΠ½Π°Π΅Ρ Ρ ΠΊΠΎΠ½ΡΠ° ΡΡΡΠΎΠΊΠΈ ΠΈ Π΄Π²ΠΈΠΆΠ΅ΡΡΡ ΠΊ Π΅Π΅ Π½Π°ΡΠ°Π»Ρ. ΠΠ»Ρ Π±ΠΎΠ»ΡΡΠΈΡ ΡΡΡΠΎΠΊ ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΡΡΠΎΠΊ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡΠ΅Π½Ρ Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠΈΠΌ, ΡΠ°ΠΊ ΡΡΠΎ ΠΏΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ Π΅Π³ΠΎ.
4.6. Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΡΡΡΠΎΠΊΡ Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»ΡΠΌΠΈ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΡΡΡΠΎΠΊΡ "Name|Address|Phone" Π½Π° ΡΡΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΡΡΠΎΠΊΠΈ β "Name", "Address" ΠΈ "Phone", ΡΠ΄Π°Π»ΠΈΠ² ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΠ»Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° ΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ find ΠΊΠ»Π°ΡΡΠ° basic_string, Π° Π΄Π»Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ substr. ΠΠ»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π»ΡΠ±ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. ΠΡΠΈΠΌΠ΅Ρ 4.10 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ vector.
ΠΡΠΈΠΌΠ΅Ρ 4.10. Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»ΡΠΌΠΈ
#include <string>
#include <vector>
#include <functional>
#include <iostream>
using namespace std;
void split(const string& s, char c, vector<string>& v) {
string::size_type i = 0;
string::size_type j = s.find(c);
while (j != string::npos) {
v.push_back(s.substr(i, j-i));
i = ++j;
j = s.find(c, j);
if (j == string::npos)
v.push_back(s.substr(i, s.length()));
}
}
int main() {
vector<string> v;
string s = "Account Name|Address 1|Address 2 |City";
split(s, '|', v);
for (int i = 0; i < v.size(); ++i) {
cout << v[i] << '\n';
}
}
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π² ΡΠ°Π±Π»ΠΎΠ½ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΠΉ Π»ΡΠ±ΠΎΠΉ ΡΠΈΠΏ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎ β ΠΏΡΠΎΡΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΡΠΉΡΠ΅ ΡΠΈΠΏ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ string Π½Π° basic_string<T>.
template<typename T>
void split(const basic_string<T>& s, T c,
vector<basic_string<T> >& v) {
basic_string<T>::size_type i = 0;
basic_string<T>::size_type j = s.find(c);
while (j != basic_string<T>::npos) {
v.push_back(s.substr(i, j-i));
i = ++j;
j = s.find(c, j);
if (j == basic_string<T>::npos)
v.push back(s.substr(i, s.length()));
}
}
ΠΠΎΠ³ΠΈΠΊΠ° ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ.
ΠΠ΄Π½Π°ΠΊΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌΠΈ ΡΠ³Π»ΠΎΠ²ΡΠΌΠΈ ΡΠΊΠΎΠ±ΠΊΠ°ΠΌΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΡΡΠΎΠΊΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΠ±Π΅Π». ΠΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠ΄Π²ΠΈΠ³Π° Π²ΠΏΡΠ°Π²ΠΎ.
ΠΡΠΈΠΌΠ΅Ρ 4.10 ΡΠ°Π·Π±ΠΈΠ²Π°Π΅Ρ ΡΡΡΠΎΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°. ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Π½Π°ΡΠ°Π»Π° ΡΡΡΠΎΠΊΠΈ, ΠΎΠ½ ΠΈΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ Ρ, Π° Π·Π°ΡΠ΅ΠΌ ΡΡΠΈΡΠ°Π΅Ρ, ΡΡΠΎ Π²ΡΠ΅, ΡΡΠΎ ΡΡΠΎΠΈΡ ΠΏΠΎΡΠ»Π΅ Π½Π°ΡΠ°Π»Π° ΡΡΡΠΎΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ Π΄ΠΎ ΡΡΠΎΠ³ΠΎ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΡΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠΌ ΡΠ΅ΠΊΡΡΠ°. ΠΠ»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»Π° Π² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ string ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ find, Π° Π΄Π»Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π² Π½ΠΎΠ²ΡΡ string, ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌΡΡ Π² vector, β ΠΌΠ΅ΡΠΎΠ΄ substr. ΠΡΠΎ ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΌΡΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΡΡ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΡ ΡΡΡΠΎΠΊ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²ΡΡ ΡΠ·ΡΠΊΠΎΠ² ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌ ΡΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΡΠΎΠΊΠΈ ΡΠ΅ΠΊΡΡΠ° Π½Π° Π»Π΅ΠΊΡΠ΅ΠΌΡ (tokenizing), ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π² ΡΠ΅ΡΠ΅ΠΏΡΠ΅ 4.7.
Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅ΠΉ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ»-ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ, ΠΈ Π½Π΅ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎ Π΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΅ΡΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Boost String Algorithms. ΠΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ. Π§ΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΡΡΡΠΎΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ split ΠΈΠ· Boost, ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ 4.11.