property_iterator.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 118 行

CPP
118
字号
// (C) Copyright Fran鏾is Faure, iMAGIS-GRAVIR / UJF, 2001. // Distributed under the Boost Software License, Version 1.0.// (See accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)// Revision History:// 03 May 2001   Jeremy Siek//      Moved property iterator code to headers. // 02 May 2001   Fran鏾is Faure//     Initial version.#include <boost/graph/adjacency_list_io.hpp>#include <boost/graph/property_iter_range.hpp>#include <fstream>#include <algorithm>using namespace boost;//======== vertex propertiesstruct toto_t {  enum { num = 23063};  typedef vertex_property_tag kind;};typedef property< toto_t, double > Toto;struct radius_t {  enum { num = 23062};  typedef vertex_property_tag kind;};typedef property< radius_t, double, Toto > Radius;struct mass_t {  enum { num = 23061};  typedef vertex_property_tag kind;};typedef property< mass_t, int, Radius > Mass;//====== edge propertiesstruct stiff_t {  enum { num = 23064};  typedef edge_property_tag kind;};typedef property<stiff_t, double> Stiff;//===== graph typetypedef Mass VertexProperty;typedef Stiff EdgeProperty;typedef adjacency_list<vecS, setS, bidirectionalS,   VertexProperty, EdgeProperty> Graph;//===== utilitiesstruct Print{  template<class T>  Print& operator() (const T& t) {    std::cout << t << " ";     return (*this);  }};template<class T>struct Set{  T value;    Set( const T& t ):value(t){}    Set& operator() (T& t) {    t=value;     return (*this);  }};//===== programint main(int argc, char* argv[]){  if (argc < 2) {    std::cerr<<"args: file"<<std::endl;     return EXIT_FAILURE;  }    std::ifstream readFile(argv[1]);    Graph graph;  readFile >> read( graph );  std::cout << write( graph );    std::cout << "radii:" << std::endl;  graph_property_iter_range<Graph,radius_t>::type     seqRadius = get_property_iter_range(graph,radius_t());  std::for_each( seqRadius.first, seqRadius.second, Print() );   std::cout << std::endl;    std::cout << "stiff:" << std::endl;  graph_property_iter_range<Graph,stiff_t>::type    seqStiff = get_property_iter_range(graph, stiff_t());  std::for_each( seqStiff.first, seqStiff.second, Print() );   std::cout << std::endl;    seqStiff = get_property_iter_range(graph, stiff_t());  std::for_each( seqStiff.first, seqStiff.second, Set<double>(2.4) );    std::cout << "new stiff:" << std::endl;  seqStiff = get_property_iter_range(graph,stiff_t());  std::for_each( seqStiff.first, seqStiff.second, Print() );   std::cout << std::endl;    return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?