C++中标准模板库std::pair的实现
生活随笔
收集整理的這篇文章主要介紹了
C++中标准模板库std::pair的实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
????????以下用C++實現了標準模板庫中的std::pair實現,參考了 cplusplus?和 vs2013中的utility文件。
????? ? 關于std::pair的介紹和用法可以參考: https://blog.csdn.net/fengbingchun/article/details/52205149?
????? ? 實現代碼pair.hpp如下:
#ifndef FBC_STL_PAIR_HPP_
#define FBC_STL_PAIR_HPP_namespace fbcstd {template<class T1, class T2>
struct pair {typedef T1 first_type;typedef T2 second_type;// default constructpair() : first(), second() {}// construct from compatible pairtemplate<class U, class V>pair(const pair<U,V>& pr) : first(pr.first), second(pr.second) {}// construct from specified valuespair(const first_type& a, const second_type& b) : first(a), second(b) {}// assign from copied pairpair& operator = (const pair& pr) {first = pr.first;second = pr.second;return (*this);}T1 first;T2 second;
}; // struct pair// relational operators for pair
template<class T1, class T2>
inline bool operator == (const pair<T1, T2>& lhs, const pair<T1, T2>& rhs)
{return (lhs.first == rhs.first && lhs.second == rhs.second);
}template<class T1, class T2>
inline bool operator != (const pair<T1, T2>& lhs, const pair<T1, T2>& rhs)
{return (!(lhs == rhs));
}template<class T1, class T2>
inline bool operator < (const pair<T1, T2>& lhs, const pair<T1, T2>& rhs)
{return (lhs.first < rhs.first || (!(rhs.first < lhs.first) && lhs.second < rhs.second));
}template<class T1, class T2>
inline bool operator > (const pair<T1, T2>& lhs, const pair<T1, T2>& rhs)
{return (rhs < lhs);
}template<class T1, class T2>
inline bool operator <= (const pair<T1, T2>& lhs, const pair<T1, T2>& rhs)
{return (!(rhs < lhs));
}template<class T1, class T2>
inline bool operator >= (const pair<T1, T2>& lhs, const pair<T1, T2>& rhs)
{return (!(lhs < rhs));
}} // namespace fbcstd#endif // FBC_STL_PAIR_HPP_
????? ? 測試代碼test_pair.cpp如下:
#include "pair.hpp"
#include <iostream>#define std fbcstdint main()
{std::pair<int, int> foo;std::pair<int, int> bar(10, 20);std::pair<int, int> car(bar);fprintf(stdout, "foo: %d, %d; bar: %d, %d; car: %d, %d\n", foo.first, foo.second, bar.first, bar.second, car.first, car.second);foo = car;fprintf(stdout, "foo: %d, %d\n", foo.first, foo.second);if (foo == bar) fprintf(stdout, "foo == bar\n");else fprintf(stdout, "foo != bar\n");std::pair<int, int> cat(10, 15);if (cat > bar) fprintf(stdout, "cat > bar\n");else if (cat == bar) fprintf(stdout, "cat == bar\n");else if (cat < bar) fprintf(stdout, "cat < bar\n");bar.first = -10;bar.second = -20;fprintf(stdout, "bar: %d, %d\n", bar.first, bar.second);fprintf(stdout, "test pair finish!\n");return 0;
}
????? ? CMakeLists.txt內容如下:
PROJECT(Samples_STL_Implementation)
CMAKE_MINIMUM_REQUIRED(VERSION 3.0)SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -O2 -std=c11")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -O2 -std=c++11")INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/src)
MESSAGE(STATUS "project source dir: ${PROJECT_SOURCE_DIR}")FILE(GLOB tests ${PROJECT_SOURCE_DIR}/test/*.cpp)FOREACH (test ${tests})STRING(REGEX MATCH "[^/]+$" test_file ${test})STRING(REPLACE ".cpp" "" test_basename ${test_file})ADD_EXECUTABLE(${test_basename} ${test})TARGET_LINK_LIBRARIES(${test_basename} pthread)
ENDFOREACH()
????? ? 腳本build.sh內容如下:
#! /bin/bashecho "Note: new create build directory, and executable file in build"
echo ${PWD}
mkdir -p build
cd build
cmake ..
make
????? ? 編譯及測試方法:將終端定位到Samples_STL_Implementation目錄下,執行:$ ./build.sh , 然后再執行$ ./build/test_pair即可。
????? ? GitHub: ?https://github.com/fengbingchun/Linux_Code_Test
總結
以上是生活随笔為你收集整理的C++中标准模板库std::pair的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GCC编译选项参数介绍
- 下一篇: Windows与Linux之间互传文件的