函數輸出迭代器

Author: David Abrahams, Jeremy Siek, Thomas Witt
Contact: dave@boost-consulting.com, jsiek@osl.iu.edu, witt@ive.uni-hannover.de
Organization: Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction
Date: 2006-09-11
Copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.
概要: 函數輸出迭代器適配器可以很容易地創建定制化的輸出迭代器。該適配器接受一個單參函數,並創建一個輸出迭代器的 model。每一個賦給該輸出迭代器的數據都被作為參數傳遞給給定的單參函數。定義該迭代器的動機是,創建一個符合標準的輸出迭代器是有些難度的,尤其是 因為正確的實現通常需要一個代理對象。

目錄

function_output_iterator 的要求

UnaryFunction 必須是可賦值和可複製構造的。

function_output_iterator 的模型

function_output_iterator 是可寫和可遞增迭代器概念的 model.

function_output_iterator 的操作

explicit function_output_iterator(const UnaryFunction& f = UnaryFunction());

作用: 構造一個 function_output_iterator 實例,其 m_f 構造自 f.

operator*();

返回: 一個未指定類型的對象 r,對於所有 t 滿足 r = t 等效於 m_f(t).

function_output_iterator& operator++();

返回: *this

function_output_iterator& operator++(int);

返回: *this
 

例子

struct string_appender
{
string_appender(std::string& s)
: m_str(&s)
{}

void operator()(const std::string& x) const
{
*m_str += x;
}

std::string* m_str;
};

int main(int, char*[])
{
std::vector<std::string> x;
x.push_back("hello");
x.push_back(" ");
x.push_back("world");
x.push_back("!");

std::string s = "";
std::copy(x.begin(), x.end(),
boost::make_function_output_iterator(string_appender(s)));

std::cout << s << std::endl;

return 0;
}