15.6. Initializing a Sequence with Comma-Separated Values
Problem
You want to initialize a sequence with a comma-delimited set of values, like you can with a built-in array.
Solution
You can use a comma-initialization syntax on standard sequences (such as vector
and list
) by
defining a helper class and overloading the comma operator for it as demonstrated in Example 15-6.
Example 15-6. Utilities for comma initialization of standard sequences
#include <vector> #include <iostream> #include <iterator> #include <algorithm> using namespace std; template<class Seq_T> struct comma_helper { typedef typename Seq_T::value_type value_type; explicit comma_helper(Seq_T& x) : m(x) { } comma_helper& operator=(const value_type& x) { m.clear(); return operator+=(x); } comma_helper& operator+=(const value_type& x) { m.push_back(x); return *this; } Seq_T& m; }; template<typename Seq_T> comma_helper<Seq_T> initialize(Seq_T& x) { return comma_helper<Seq_T>(x); } template<class Seq_T, class Scalar_T> comma_helper<Seq_T>& operator,(comma_helper<Seq_T>& h, Scalar_T x) { h += x; return h; } int main() { vector v; int a = 2; int b = 5; initialize(v) = 0, 1, 1, a, 3, b, 8, 13; cout << v[3] << endl; // outputs 2 system("pause"); return EXIT_SUCCESS; }
Discussion
Often time standard sequences are initialized by calling a push_back
member function several times. Since this is somewhat repetitive, I
wrote a function, initialize
, which helps eliminate the tedium, by enabling comma initialization à la built-in arrays. ...
Get C++ Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.