天天看點

boost uuid 學習筆記

#include <vector>

#include <iostream>

#include <boost/uuid/uuid.hpp>

#include <boost/uuid/uuid_generators.hpp>

#include <boost/uuid/uuid_io.hpp>

using namespace boost::uuids;

using namespace std;

int main()

{

//-------------------------

// 一些std函數的應用

vector<unsigned int> v(16, 7);

uuid u;

std::copy(v.begin(), v.end(), u.begin()); // 将一個序列複制到另一個序列中(從begin到end)

std::fill_n(u.data + 2, 6, 8); // 将數組第二個序列号後的6個值賦為8

cout <<"/n u first print:" <<u<<endl;

std::memset(u.data, 0, u.size()); // 将數組中的所有元素都置零

cout <<"UUID is empty:"<<u.is_nil()<<endl; // 是否全零

cout <<"u second print:" <<u<<endl; // 再次輸輸出

//--------------------------

// uuid的比較(字典序1~9,a~z排序)

uuid u1, u2;

std::fill_n(u1.begin(), u1.size(), 0xab); // 從第位開始始,後面size()位都賦成0xab

std::fill_n(u2.begin(), u2.size(), 0x10);

cout <<"uuid1:"<<u1<<endl<<"uuid2:"<<u2<<endl;

(u1>=u2)?cout<<"uuid1 is Max equal to uuid2/n":cout<<"uuid2 is Max to uuid1/n";

// UUID 的幾種生成器,它們都是函數對象

// 第一種:

// Nil生成器(生成一個全零/無效的UUID/is_nil)

uuid nilUUID1 = nil_generator()(); // 第一個括号是構造函數,第二個是調用重載操作符(operator())

uuid nilUUID2 = nil_uuid(); // 内聯函數

cout<< "nilUUID1: "<<nilUUID1<<endl;

cout<< "nilUUID2: "<<nilUUID2<<endl;

// 第二種:

// 字元串生成器(可是c數組,string,wstring,或疊代器指定的字元串區間)

string_generator sgen;

uuid strUUID1 = sgen("0123456789abcdef0123456789uvwxyz"); // 沒有隔線分開,uvwxyz會變成ffffff

uuid strUUID2 = sgen("01234567-89ab-cdef-0123-456789abcdef"); // 有分隔,分隔不能亂隔

uuid strUUID3 = sgen(L"{01234567-89ab-cdef-0123-456789abcdef}"); // 使用"{}"括起來除{}外不能有16進制外的任何字元

cout << "strUUID1 value: "<<strUUID1<<endl;

cout << "strUUID2 value: "<<strUUID2<<endl;

cout << "strUUID3 value: "<<strUUID3<<endl;

// 第三種:

// 名字生成器(參數可以是16進制字元外的字元)

uuid baseUUID = sgen(L"{01234567-89ab-cdef-0123-456789abcdef}");

name_generator ngen(baseUUID); // 構造名字生成器,需要一個基準uuid,

// 隻要基準uuid不變,相同字元串總産生相同的uuid

uuid nameUUID1 = ngen("Ajiaxi"); // 為Ajiaxi生成一個UUID, version是shal算法

uuid nameUUID2 = ngen("Link"); // 為Link生成一個UUID

cout << "nameUUID1 value: "<<nameUUID1<<endl;

cout << "nameUUID2 value: "<<nameUUID2<<endl;

// 第四種:

// 随機生成器(使用boost::random生成随機種子)

random_generator rgen;

uuid ranUUID = rgen(); // 生成一個随機uuid

cout << "ranUUID value: "<<ranUUID<<endl;

getchar();

return 0;

}

繼續閱讀