boost库的使用_tuple(二)

2014-11-24 10:45:13 · 作者: · 浏览: 1
}
};
int main()
{
// Tiers are tuples, where all elements are of non-const reference types.
// They are constructed with a call to the tie function template
int i; char c; double d;
boost::tie(i, c, d) = boost::make_tuple(1,"a", 5.5);
std::cout << i << " " << c << " " << d << std::endl;

// test ignore
char ch;
boost::tie(boost::tuples::ignore, ch) = std::make_pair(1, "a");
std::cout << ch << std::endl;

// test for comparison
boost::tuple tup1(11,"Match ");
boost::tuple tup2(12,"Match ");
std::cout << std::boolalpha;
std::cout << "Comparison: tup1 is less than tup2 ";
std::cout << "tup1==tup2: " << (tup1==tup2) << " ";
std::cout << "tup1!=tup2: " << (tup1!=tup2) << " ";
std::cout << "tup1 std::cout << "tup1>tup2: " << (tup1>tup2) << " ";
std::cout << "tup1<=tup2: " << (tup1<=tup2) << " ";
std::cout << "tup1>=tup2: " << (tup1>=tup2) << " ";
tup2.get<0>()=boost::get<0>(tup1); //tup2=tup1 also works
std::cout << " Comparison: tup1 equals tup2 ";
std::cout << "tup1==tup2: " << (tup1==tup2) << " ";
std::cout << "tup1!=tup2: " << (tup1!=tup2) << " ";
std::cout << "tup1 std::cout << "tup1>tup2: " << (tup1>tup2) << " ";
std::cout << "tup1<=tup2: " << (tup1<=tup2) << " ";
std::cout << "tup1>=tup2: " << (tup1>=tup2) << " ";

//test tuple using in the container
typedef boost::tuple num_tuple;
std::vector vec;
vec.push_back(num_tuple(6,2));
vec.push_back(num_tuple(7,1));
vec.push_back(num_tuple(5));
std::sort(vec.begin(),vec.end(),element_less<1>());
std::cout << " After sorting: " << vec[0].get<0>() << " " << vec[1].get<0>() << " " << vec[2].get<0>() << " ";


// test for io
boost::tuple a(1.0f, 2, std::string("Howdy folks!"));
std::cout << std::endl << a << std::endl;

boost::tuple ii;

std::cin >> ii;
std::cout << boost::tuples::set_open("[") << boost::tuples::set_close("]")<< boost::tuples::set_delimiter(":");
std::cout << ii << std::endl;

boost::tuples::tuple tuple1;
int head = tuple1.get_head();
double tail = tuple1.get_tail();

}

四 注意

1)函数 make_tuple 类似于 std::make_pair. 缺省情况下,make_tuple 设置元素类型为非const, 非引用的,即是最简单的、根本的参数类

型。

2)为了使一个 tuple 的元素设为引用类型,你要使用函数 boost::ref, 它来自另一个名为 Boost.Ref 的 Boost 库。

3)如果元素需要是 const 引用的,就使用来自 Boost.Ref 的 boost::cref。

4)如果你要使绑定的每个元素变量都为ref,则可以使用tie函数。

五 参考

1)Beyond the C++ Standard Library: An Introduction to Boost
2)boost在线document

原文链接:http://www.cppblog.com/mzty/archive/2007/08/21/30509.html


[python]
include
#include
#include
using namespace std;
using boost::tuple;
class A{
int a;
};

A class_a;
boost::tuple t1("abc", class_a);

int main()
{

//boost::tuple tuple_2 = boost::tuple::make_tuple double d = 2.0;
A a;
tuple t(1, d, a);
const tuple ct = t;

int i = boost::get<0>(t);
cout<<"the i: "<
i = t.get<0>();
cout<<"the i: "<
boost::get<1>(t) = 45.34;
double d_ret = t.get<1>();
cout<<"the d_ret: "<
int tie_i;
char tie_char;
double tie_doulbe;
boost::tuple tuple_temp(3, 'A', 3.1415);
boost::tie(tie_i, tie_char, tie_doulbe) = tuple_temp;
tuple_temp.get<2>() = 3.132434;
cout<<"the tie_double: "<()< cout<<"the tie_i: "< cout<<"the tie_double: "<
char char_temp;
boost::tie(boost::tuples::ignore, char_temp) = std::make_pair(123, 'a');
cout<< char_temp<
tuple tuple_a(1.3, 2, "abd");
cout< cout< return 0;
}


int main()
{

//boost::tuple tuple_2 = boost::tuple::make_tuple(5, 10, 23.2);
double d = 2.0;
A a;
tuple t(1, d, a);
const tuple ct = t;

int i = boost::get<0>(t);
cout<<"the i: "<
i = t.get<0>();
cout<<"the i: "<
boost::get<1>(t) = 45.34;
double d_ret = t.get<1>();
cout<<"the d_ret: "<
int tie_i;
char tie_char;
double tie_doulbe;
boost::tuple tuple_temp(3, 'A', 3.1415);
boost::tie(tie_i, tie_char, tie_doulbe) = tuple_temp;
tuple_temp.get<2>() = 3.132434;
cout<<"the tie_double: "<()< cout<<"the tie_i: "< cout<<"the tie_double: "<
char char_temp;
boost::tie(boost::tuples::ignore, char_temp) = std::make_pair(123, 'a');
cout<< char_temp<
tuple tuple_a(1.3, 2, "abd");
cout< cout< return 0;
}