Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C++. Π‘Π±ΠΎΡ€Π½ΠΈΠΊ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ²Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 98

Автор Π”. БтСфСнс

#include <iostream>

#include <string>


using std::string;


void replaceExt(string& s, const string& newExt) {

 string::size_type i = s.rfind('.', s.length());

 if (i != string::npos) {

  s.replace(i+1, newExt.length(), newExt);

 }

}


int main(int argc, char** argv) {

 string path = argv[1];

 replaceExt(path, "foobar");

 std::cout << "The new name is \"" << path << "\"\n";

}

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Π—Π΄Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ Ρ‚ΠΎΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ примСнялся Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°Ρ…, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС я использовал Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ replace для Π·Π°ΠΌΠ΅Π½Ρ‹ части строки Π½ΠΎΠ²ΠΎΠΉ подстрокой. Ѐункция replace ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ вставляСтся новая подстрока, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ опрСдСляСт количСство символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π² Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ строкС. Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ β€” это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ использовано для Π·Π°ΠΌΠ΅Π½Ρ‹ удаляСмой части строки.

Π‘ΠΌΠΎΡ‚Ρ€ΠΈ Ρ‚Π°ΠΊΠΆΠ΅

Π Π΅Ρ†Π΅ΠΏΡ‚ 4.9.

10.17. ОбъСдинСниС Π΄Π²ΡƒΡ… ΠΏΡƒΡ‚Π΅ΠΉ Π² ΠΎΠ΄ΠΈΠ½

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Π΄Π²Π° ΠΏΡƒΡ‚ΠΈ ΠΈ трСбуСтся ΠΈΡ… ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π² ΠΎΠ΄ΠΈΠ½ ΠΏΡƒΡ‚ΡŒ. НапримСр, Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ /usr/home/ryan ΠΈ Π² качСствС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ β€” utils/compilers; трСбуСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ /usr/home/ryan/utils/compilers, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΈ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ элСмСнтов ΠΏΡƒΡ‚ΠΈ.

РСшСниС

РассматривайтС ΠΏΡƒΡ‚ΠΈ ΠΊΠ°ΠΊ строки ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ добавлСния Π² ΠΊΠΎΠ½Π΅Ρ† строки, operator+=, для составлСния ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ ΠΈΠ· составных частСй. Π‘ΠΌ. ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 10.26.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 10.26. ОбъСдинСниС ΠΏΡƒΡ‚Π΅ΠΉ

#include <iostream>

#include <string>


using std::string;


string pathAppend(const string& p1, const string& p2) {

 char sep = '/';

 string tmp = p1;

#ifdef _WIN32

 sep = '\\';

#endif

 if (p1[p1.length()] != sep) { // НСобходимо Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

  tmp += sep;                  // Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ

  return(tmp + p2);

 } else

  return(p1 + p2);

}


int main(int argc, char** argv) {

 string path = argv[1];

 std::cout << "Appending somedir\\anotherdir is \""

  << pathAppend(path, "somedir\\anotherdir") << "\"\n";

}

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° 10.26 для прСдставлСния ΠΏΡƒΡ‚Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ строки, Π½ΠΎ здСсь Π½Π΅ дСлаСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ достовСрности ΠΏΡƒΡ‚Π΅ΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΡ… ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ зависит ΠΎΡ‚ содСрТащихся Π² Π½ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. НапримСр, Ссли эти значСния ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π½Π°Ρ‚ΡŒ, ΠΈΠΌΠ΅ΡŽΡ‚ Π»ΠΈ ΠΎΠ½ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ОБ ΠΈΠ»ΠΈ содСрТат нСдопустимыС символы.

Для ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Ρ‹ я Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ» ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎ использованию Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Boost Filesystem, ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с путями Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ прСимущСств. Как я Π³ΠΎΠ²ΠΎΡ€ΠΈΠ» ΠΏΡ€ΠΈ обсуТдСнии Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° 10.7, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Boost Filesystem содСрТит класс path, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ пСрСносимоС прСдставлСниС ΠΏΡƒΡ‚ΠΈ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Filesystem Π² основном ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ path, ΠΈ поэтому с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса path ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ объСдинСниС ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ с Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΉ Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ. (Π‘ΠΌ. ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 10.27.)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 10.27. ОбъСдинСниС ΠΏΡƒΡ‚Π΅ΠΉ срСдствами Boost

#include <iostream>

#include <string>

#include <cstdlib>

#include <boost/filesystem/operations.hpp>

#include <boost/filesystem/fstream.hpp>


using namespace std;

using namespace boost::filesystem;


int main(int argc, char** argv) {

 // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²...

 try {

  // Π‘ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄Π²ΡƒΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² path

  p1 = complete(path(argv[2], native),

  path(argv[1], native));

  cout << p1.string() << endl;

  // Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ с Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΏΡƒΡ‚ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° path

  p2 = system_complete(path(argv[2], native));

  cout << p2.string() << endl;

 } catch (exception& e) {

  cerr << e.what() << endl;

 }

 return(EXIT_SUCCESS);

}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° 10.27 ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΈΠ΄.

D:\src\ccb\c10>bin\MakePathBoost.exe d:\temp some\other\dir

d:/temp/some/other/dir

D:/src/ccb/c10/some/other/dir

Или Ρ‚Π°ΠΊΠΎΠΉ.

D:\src\ccb\c10>bin\MakePathBoost.exe d:\temp с:\WINDOWS\system32

c:/WINDOWS/system32

c:/WINDOWS/system32

Из этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ complete ΠΈ system_complete ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ ΠΏΡƒΡ‚ΠΈ, ΠΊΠΎΠ³Π΄Π° это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° объСдинСниС ΠΏΡƒΡ‚Π΅ΠΉ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла. НапримСр, Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ являСтся Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ. Ѐункция complete ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΠΈΡ… ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½, Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ complete являСтся ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ, ΠΈ Ссли ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΡƒΠΆΠ΅ являСтся Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ игнорируСтся. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Β«d:\tempΒ» игнорируСтся, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ мною Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΡƒΠΆΠ΅ являСтся Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ.

system_complete ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС это ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ) ΠΈ добавляСт Π΅Π³ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ† Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, получая Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ. И Π² этом случаС, Ссли ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ Π²Π°ΠΌΠΈ ΠΏΡƒΡ‚ΡŒ ΡƒΠΆΠ΅ являСтся Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌ, Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ игнорируСтся ΠΈ просто возвращаСтся ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ Π²Π°ΠΌΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ.

Однако эти ΠΏΡƒΡ‚ΠΈ Π½Π΅ ΡΠΎΠ³Π»Π°ΡΡƒΡŽΡ‚ΡΡ с трСбованиями Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. Π’Π°ΠΌ придСтся самому ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ path, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. НапримСр, для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ сущСствования этих ΠΏΡƒΡ‚Π΅ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ exists.

path p1 = complete(path(argv[2], native),

path(argv[1], native));

if (exists(p1)) {

 // ...

БущСствуСт ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡƒΡ‚ΠΈ: is_directory, is_empty, file_size, last_write_time ΠΈ Ρ‚.Π΄. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Boost Filesystem Π½Π° сайтС www.boost.org.

Π‘ΠΌΠΎΡ‚Ρ€ΠΈ Ρ‚Π°ΠΊΠΆΠ΅

Π Π΅Ρ†Π΅ΠΏΡ‚ 10.7.

Π“Π»Π°Π²Π° 11

Наука ΠΈ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°

11.0. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π―Π·Ρ‹ΠΊ программирования C++ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… ΠΈ матСматичСских Π·Π°Π΄Π°Ρ‡ ΠΈΠ·-Π·Π° своСй гибкости, Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ эффСктивности. Одно ΠΈΠ· самых Π±ΠΎΠ»ΡŒΡˆΠΈΡ… прСимущСств примСнСния C++ для выполнСния числСнных расчСтов связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ избыточности.

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈ слоТилось Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ написанныС Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ… языках ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ числСнныС расчСты, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ снова ΠΈ снова ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… числовых Ρ‚ΠΈΠΏΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… чисСл, для Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… чисСл, для чисСл с ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ, для чисСл с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ, для ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… числовых Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Ρ‚.Π΄.). Π’ C++ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚Π°ΠΊΠΎΠΉ избыточности Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ шаблонов. Π¨Π°Π±Π»ΠΎΠ½Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ зависят ΠΎΡ‚ прСдставлСния Π΄Π°Π½Π½Ρ‹Ρ…, β€” этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΡˆΠΈΡ€ΠΎΠΊΠΎ извСстСн ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Β«ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β».

НСльзя ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ C++ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ нСдостатков, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ числСнных расчСтов. Π‘Π°ΠΌΡ‹ΠΌ большим нСдостатком Π‘++, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠΌ Π΅Π³ΠΎ ΠΎΡ‚ спСциализированных матСматичСских ΠΈ Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… языков программирования, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ возмоТности стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹Ρ… для программирования числСнных расчСтов. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, самым большим ΡƒΠΏΡƒΡ‰Π΅Π½ΠΈΠ΅ΠΌ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ являСтся отсутствиС ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Ρ†Π΅Π»Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ точности.

Π’ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ я ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ распространСнных Π·Π°Π΄Π°Ρ‡ числСнного программирования ΠΈ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ программирования ΠΏΡ€ΠΈ написании эффСктивного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ числСнныС расчСты. Π’ подходящих случаях я Π±ΡƒΠ΄Ρƒ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ друТСствСнныС коммСрчСскиС Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ послуТной список. Π’ этой Π³Π»Π°Π²Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ основныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ программирования, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ это дСлаСтся постСпСнно, пСрСходя ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ.

МногиС программисты, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π‘++, всС ΠΆΠ΅ с Π½Π΅Π΄ΠΎΠ²Π΅Ρ€ΠΈΠ΅ΠΌ относятся ΠΊ шаблонам ΠΈ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈΠ·-Π·Π° ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠΉ ΠΈΡ… слоТности. Когда ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ‹ Π² язык, ΠΎΠ½ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹, Π° программисты ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ компиляторов Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈΡ… ΠΏΠΎΠ½ΠΈΠΌΠ°Π»ΠΈ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ программисты, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π°Π²Ρ‚ΠΎΡ€Π°, ΠΈΠ·Π±Π΅Π³Π°Π»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π° C++ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π»Π΅Ρ‚, ΠΏΠΎΠΊΠ° эта тСхнология Π½Π΅ достигла зрСлости.

Π’ настоящСС врСмя ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ рассматриваСтся ΠΊΠ°ΠΊ мощная ΠΈ полСзная ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования, которая поддСрТиваСтся Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ популярных языков программирования. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, тСхнология Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ компиляторов C++ ΠΎΡ‡Π΅Π½ΡŒ сильно ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π»Π°ΡΡŒ, ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° соврСмСнных компиляторов с шаблонами стала Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивной ΠΈ стандартизованной. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ соврСмСнный C++ стал ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ языком программирования Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… ΠΈ числСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.