打印出一个 std::vector<std::wstring>

Print out a std::vector<std::wstring>

本文关键字:std lt wstring gt vector 一个 打印      更新时间:2023-10-16

我试图使用它来使用 std::copy 打印出std::vector<std::wstring>的内容,但我不明白该代码如何运行得足够好,并且无法编译它。代码应该是什么?

我使用了 Rob 的例子,但它不起作用:

std::vector<std::wstring> keys = ...;
std::copy(keys.begin(), keys.end(), std::ostream_iterator<std::wstring>(std::wcout, " "));

我收到错误:

1>error C2665: 'std::ostream_iterator<_Ty>::ostream_iterator' : none of the 2 overloads could convert all the argument types
1>        with
1>        [
1>            _Ty=std::wstring
1>        ]
1>        C:Program FilesMicrosoft Visual Studio 8VCincludeiterator(300): could be 'std::ostream_iterator<_Ty>::ostream_iterator(std::basic_ostream<_Elem,_Traits> &,const _Elem *)'
1>        with
1>        [
1>            _Ty=std::wstring,
1>            _Elem=char,
1>            _Traits=std::char_traits<char>
1>        ]
1>        while trying to match the argument list '(std::wostream, const char [2])'

为什么当我使用wostreamwcout时它会告诉我_Elem=char

必须使用 wstring, wchar_t 作为模板参数,wcout 作为输出流:

std::copy(v.begin(), 
          v.end(), 
          std::ostream_iterator<std::wstring, wchar_t>(std::wcout, L"n"));

测试程序:

#include <vector>
#include <string>
#include <iostream>
#include <iterator>
int main () {
  std::vector<std::wstring> v;
  v.push_back(L"Hello");
  v.push_back(L"World");
  std::copy(v.begin(),
            v.end(),
            std::ostream_iterator<std::wstring, wchar_t>(std::wcout, L"n"));
}