c++之 std::tie
生活随笔
收集整理的這篇文章主要介紹了
c++之 std::tie
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介
在c++ 11標準庫中,加入了std::tie,在c++ 14中改進,方便使用。 其與tuple關系密切, 主要目的是方便地使用tuple。
元組 std::tuple
元組tuple,有人認為是std::pair擴展。pair只能把2個數據打包,而tuple可以打包更多的數據,雖然超過了9個時,其方式就比較搞笑了。
template<class _Ty1,class _Ty2>struct pair{ // store a pair of valuestypedef pair<_Ty1, _Ty2> _Myt;typedef _Ty1 first_type;typedef _Ty2 second_type;pair(): first(), second(){ // default construct}pair(const _Ty1& _Val1, const _Ty2& _Val2): first(_Val1), second(_Val2){ // construct from specified values}template<class _Other1,class _Other2,class = typename enable_if<is_convertible<const _Other1&, _Ty1>::value&& is_convertible<const _Other2&, _Ty2>::value,void>::type>pair(const pair<_Other1, _Other2>& _Right): first(_Right.first), second(_Right.second){ // construct from compatible pair}//......為生成pair, c++ 提供了make_pair的快捷操作。
而tuple的定義:
template<class _This,class... _Rest>class tuple<_This, _Rest...>: private tuple<_Rest...>{ // recursive tuple definition public:typedef _This _This_type;typedef tuple<_This, _Rest...> _Myt;typedef tuple<_Rest...> _Mybase;static const size_t _Mysize = 1 + sizeof...(_Rest);tuple(): _Mybase(),_Myfirst(){ // construct default}template<class... _Rest2>explicit tuple(_Tuple_alloc_t, _Rest2&&... _Rest_arg): _Mybase(_STD forward<_Rest2>(_Rest_arg)...),_Myfirst(allocator_arg){ // construct smuggled allocator_arg_t element}template<class... _Other,class = typename _Tuple_enable<tuple<const _Other&...>, _Myt>::type>tuple(const tuple<_Other...>& _Right): _Mybase(_Right._Get_rest()), _Myfirst(_Right._Myfirst._Val){ // construct by copying same size tuple}// ....相應地,c++ 標準庫提供了make_tuple 內聯方法,快速創建tuple對象。
std::tie
一般std::tie有2個作用:
- 創建一個std::tuple;
- 解包標準庫中的一些集合類,簡化訪問方法。
生成tuple
使用極為簡單,可以使用構造函數,內聯快捷方法。
示例:
下面的示例使用內聯快捷方法。 這里還使用了新版本c++支持的類型auto , 讓編譯器自動判斷類型 – 雖然傳統的我并不喜歡-- 編譯時,編譯器要選擇至少支持C11版本. 如果使用VS,可以看到這些設置。
在linux/macOS上,在g++ build時,指定std, 如:
代碼示例:
auto student2 = std::make_tuple(11, 98, "Tom" );使用std:tie,則也可以簡單處理:
string name3 = "david3"; int id3 = 3; double d3 = 99.3; tuple<int, double, string> student3 = std::tie(id3, d3, name3);解包數據
使用std::tie 可以對一些集合類型進行解包,包括set, tuple, pair … 簡化數據訪問并賦值到變量。
如示例:
int id3; string name3; std::tie(id3, std::ignore, name3) = student3; cout << "tie student-" << id3 << " \t " << name3 << endl;注意: 這里使用std:ignore跳過數據對象中不關心的數據。
輸出:
tie student-3 david3總結
以上是生活随笔為你收集整理的c++之 std::tie的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows下架设SVN服务器并设置开
- 下一篇: python自动化(四)app自动化:2