boost c++庫學習例項
阿新 • • 發佈:2018-12-30
1、linux下載編譯boost原始碼:
./bootstrap.sh
sudo ./bjam --layout=versioned --build-type=complete install
2、測試例項:
#include <cstdlib> #include <iostream> #include <string> #include <boost/progress.hpp> #include <boost/asio.hpp> #include <fstream> #include <vector> using namespace std; using namespace boost; void test001() { std::vector<std::string> v(100); std::ofstream fs; progress_display pd(v.size()); std::vector<string>::iterator it; for (it = v.begin(); it != v.end(); ++it) { fs << *it << std::endl; ++it; cout << "*"; //sleep(1); } cout << endl; } #include <boost/date_time/gregorian/greg_date.hpp> #include <boost/date_time/gregorian_calendar.hpp> void test002() { boost::gregorian::date d(2010, 1, 30); std::cout << d.year() << std::endl; std::cout << d.month() << std::endl; std::cout << d.day() << std::endl; std::cout << d.day_of_week() << std::endl; std::cout << d.end_of_month().day() << std::endl; } #include <boost/shared_ptr.hpp> class Shared { public: Shared() { std::cout << "ctor() called" << std::endl; } Shared(const Shared & other) { std::cout << "copy ctor() called" << std::endl; } ~Shared() { std::cout << "dtor() called" << std::endl; } Shared & operator =(const Shared & other) { std::cout << "operator = called" << std::endl; } }; void test003() { typedef boost::shared_ptr<Shared> SharedSP; typedef std::vector<SharedSP> VShared; VShared v; v.push_back(SharedSP(new Shared())); v.push_back(SharedSP(new Shared())); } #include <boost/lexical_cast.hpp> //字串轉換為整形 void test004(string str) { int i = boost::lexical_cast<int>(str); cout << i << endl; } #include <boost/format.hpp> void test_format() { // 使用%序號%的方式給出指示符, 後面用%連線對應的資料。 cout << boost::format("writing %1%, x=%2% : %3%-th try") % "toto" % 40.23 % 50 << endl; // 輸出:writing toto, x=40.23 : 50-th try // 可以延遲使用,順序不必一致 boost::format fmter("%2% %1%"); fmter % 36; fmter % 77; cout << fmter << endl; // 輸出:77 36 // 可重用 fmter % 12; fmter % 24; cout << fmter << endl; // 輸出:24 12 // 可直接轉成字串 std::string s = fmter.str(); std::string s2 = str(boost::format("%2% %1% %2% %1%") % "World" % "Hello"); cout << s << endl << s2 << endl; // 輸出: // 24 12 // Hello World Hello World // 可以使用printf指示符 cout << boost::format("%3.1f - %.2f%%") % 10.0 % 12.5 << endl; // 輸出:10.0 - 12.50% // printf指示符裡使用N$指定使用第幾個引數 cout << boost::format("%2$3.1f - %1$.2f%%") % 10.0 % 12.5 << endl; // 輸出:12.5 - 10.00% } #include <boost/algorithm/string.hpp> void test005() { string str("readme001readme002readme.txt"); if (ends_with(str, "txt")) { cout << to_upper_copy(str) + " UPPER" << endl; assert(ends_with(str, "txt")); } replace_first(str, "readme", "followme"); replace_all(str, "readme", "hehe"); cout << str << endl; vector<char> v(str.begin(), str.end()); vector<char> v2 = to_upper_copy(erase_first_copy(v, "txt")); for (int i = 0; i < v2.size(); ++i) { cout << v2[i]; } cout << endl; } #include <boost/tokenizer.hpp> void test_tokenizer() { string s("This is , a ,test!,中文,你好"); boost::tokenizer<> tok(s); for (tokenizer<>::iterator beg = tok.begin(); beg != tok.end(); ++beg) { cout << *beg << "-"; } cout << endl; } #include <boost/xpressive/xpressive_dynamic.hpp> #include <boost/regex.hpp> //需要編譯器加上 -lboost_regex //使用cppunit需要聯結器加上 -lncurses -lcppunit -ldl void test006() { regex reg("a.c"); assert(regex_match("abc", reg)); //assert(regex_match("a + c", reg)); assert(!regex_match("ac", reg)); assert(!regex_match("abd", reg)); boost::regex reg2("\\d{3}([a-zA-Z]+).(\\d{2}|N/A)\\s\\1"); std::string correct = "123Hello N/A Hello"; std::string incorrect = "123Hello 12 hello"; assert(boost::regex_match(correct, reg2) == true); assert(boost::regex_match(incorrect, reg2) == false); } #include <boost/any.hpp> void test_any() { typedef std::vector<boost::any> many; many a; a.push_back(2); //可以轉換 a.push_back(string("test")); //轉換失敗 for (unsigned int i = 0; i < a.size(); ++i) { cout << a[i].type().name() << "="; try { int result = any_cast<int>(a[i]); cout << result << endl; } catch (boost::bad_any_cast & ex) { cout << "cast error:" << ex.what() << endl; } } } #include <boost/thread/thread.hpp> void hello() { std::cout << "Hello world, I'm a thread!" << std::endl; } //編譯需要加上-lboost_system -L/usr/local/lib -lboost-thread //-lboost_thread -lboost_system //如果報錯error while loading shared libraries: libboost_thread.so.1.49.0: cannot open shared object file: No , //則使用sudo ldconfig /home/shaochangqing/study/boost_1_49_0/stage/lib 或者export PATH=${PATH}:/usr/local/lib:/usr/local/include int test_Thread() { boost::thread thrd(&hello); // 譯註:hello前面的&符號,可要可不要 thrd.join(); return 0; } //extern bool httpGet(/*out*/string& result, const string& host, uint16_t port, const string& url, boost::asio::io_service &_io); /** 本程式基於boost1_55_0*/ int main(int argc, char** argv) { test_Thread(); test001(); test002(); test003(); test004("123456"); test_format(); test005(); test_tokenizer(); test006(); test_any(); /**boost::asio::io_service io; string str; httpGet(str,"http://www.baidu.com/",80,"index.html",io); cout<<str<<endl;*/ printf("\nok\n"); return 0; }