c++ 中的函数语法, 只能有一个返回值, 不像 python 一样, 可以把多个返回值包装到一个元组中, 如下
(x,y) = get_postion(value)
C++ 在标准库中定义了工具类 std::pair<class T1, class T2>, 使 C++ 可以通过相似的方法支持返回两个值. pair 的源码类似于:
- namespace std {
- template <class T1, class T2>
- struct pair{
- typedef T1 first_type;
- typedef T2 second_type;
- T1 first;
- T2 second;
- pair():first(T1(), second(T2())){
- }
- pair(const T1&a, const T2&b):first(a),second(b){
- }
- template<class U, class V>
- pair(const pair<U,V>&p):first(p.first), second(p.second){
- }
- };
- template<class T1, class T2>
- bool operator==(const pair<T1, T2> &x, const pair<T1, T2> &y)
- {
- return x.first == y.first && x.second == y.second;
- }
- template<class T1, class T2>
- bool operator<(const pair<T1, T2> &x, const pair<T1, T2> &y)
- {
- return x.first <y.first || (!(x.first < y.first) && (x.second < y.second));
- }
- //> != 等类似
- template<class T1, class T2>
- pair<T1,T2> make_pair(const T1&_first, const T2&_second)
- {
- return pair<T1,T2>(_first, _second);
- }
- }
标准库中的 std::pair<class T1, class T2 > 定义在头文件 < utility > 中.
- std::pair<double, int> getPrice(double unit_price, int amount){
- return std::make_pair(unit_price, amount);
- }
- int main()
- {
- std::pair<double, int> info;
- info = getPrice(3.5, 12);
- std::cout <<info.first << ":" << info.second << endl;
- }
在标准库中, 容器 map 就用到了 pair 来保存自己的每一项. 我们在访问 map 的元素时, 可以通过 pair 类来访问 key 和 value
- #include <iostream>
- #include <map>
- #include <utility>
- using namespace std;
- int main()
- {
- typedef map<string, float> StringFloatMap;
- StringFloatMap coll;
- coll["VAT"] = 0.15;
- coll["Pi"] = 3.1415;
- coll["an arbitrary number"] = 4983.223;
- coll["Null"] = 0;
- StringFloatMap::iterator pos;
- for(pos = coll.begin(); pos!=coll.end(); ++pos){
- cout <<"key: \"" << pos->first <<"\" " <<"value: \""<< pos->second <<"\" "<<endl;
- }
- }
来源: http://www.bubuko.com/infodetail-3365655.html