std::wostream_iterator
std::wostream_iterator
为什么C++中没有std::wostream_iterator?
这有什么好的理由吗?
#include <fstream>
#include <iterator>
#include <string>
#include <vector>
int main()
{
std::vector<std::wstring> myvec = { L"first", L"second" };
std::wofstream f("New.txt");
// std::copy(myvec.begin(), myvec.end(), std::wostream_iterator<std::wstring>(f)); // Error
// std::copy(myvec.begin(), myvec.end(), std::ostream_iterator<std::wstring>(f)); // Error
std::copy(myvec.begin(), myvec.end(), std::ostream_iterator<std::wstring, wchar_t>(f)); // Ok
std::copy(myvec.begin(), myvec.end(), std::ostream_iterator<std::wstring, wchar_t, std::char_traits<wchar_t>>(f)); // Ok
}
因为std::ostream_iterator
不是typedef
(并且std::wstring
是std::basic_string
上的typedef,charT
=wchar_t
)。
template <class T, class charT = char, class traits = char_traits<charT> >
class ostream_iterator:
public iterator<output_iterator_tag, void, void, void, void>
第二次复制操作
std::copy(myvec.begin(), myvec.end(), std::ostream_iterator<std::wstring>(f));
是不正确的,因为
typedef basic_ostream<charT,traits> ostream_type;
因此,在这种情况下,ostream_type
是basic_ostream<char, std::char_traits<char> >
ostream_iterator(ostream_type& s);
构造函数只能接收此类型,但我们传递了basic_ofstream<wchar_t, std::char_traits<wchar_t> >
,这是不正确的。
相关文章:
- 在调试模式下引发C++ "deque iterator not dereferencable"异常
- std::iterator::reference 必须是引用吗?
- 为什么unordered_set<string::iterator>不起作用?
- 造成致命错误:boost/fusion/iterator/equal_to.hpp 没有这样的文件或目录
- Visual accept std::string from std::byte iterator
- 什么是"std::set<int,int>::iterator"?
- 从 std::vector 中删除项目时"Iterator not incrementable"
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 空集"Out of bound iterator"
- 如何使用set<pair<int,int> >::iterator itrator it迭代set<pair<int,int> >st中的值?
- 给定一个类型为 Container:<T>:Iterator 的函数参数,如何为某些类型的 T 实现特定的重载?
- 带升压async_read_some "String iterator not dereferncable"
- C++为什么"deque iterator not dereferencable "
- 错误:与'operator='不匹配(操作数类型为"std::map<int、double>::iterator
- 自动,错误:MAP ITERATOR没有名为“ First”的成员
- set<shared_ptr<T>>::iterator to set<shared_ptr<t const>>::const_iterator
- 标准::复制失败,"cannot seek vector iterator after end"
- 如何将STD :: Iterator与基本类型Uint8_t**使用
- Gnu 的 <Iterator>reverse_iterator::运算符>和代理迭代器
- "Deque iterator not dereferencable"错误