【问题标题】:How to declarate a vector of wchar_t[] in C++? [duplicate]如何在 C++ 中声明 wchar_t[] 的向量? [复制]
【发布时间】:2013-03-04 19:45:39
【问题描述】:

我需要在包含 wchar_t 的 c 字符串的 C++ 程序向量中使用。 我试图做到这一点:

using std::vector;

vector<wchar_t[SIZE]> string_list(100);

但我得到包含以下单词的大错误输出:

error: functional cast to array type «std::vector<wchar_t [512]>::value_type {aka wchar_t [512]}»

我做错了什么? 为什么会出现这样的错误?

【问题讨论】:

    标签: c++ vector wchar-t


    【解决方案1】:

    您不能在 C++ 中声明数组向量。一种方法是将您的数组放入一个结构中,然后在您的向量中使用该结构。

    struct WCharArray
    {
      wchar_t a[SIZE];
    };
    
    vector<WCharArray> string_list(100);
    

    【讨论】:

      【解决方案2】:

      您不能为数组创建vector,因为数组很奇怪。

      你有几个选择:

      1. 如果您的字符串是静态的,您可以使用指针向量 vector&lt;wchar_t*&gt;
      2. 如果您确实需要数组向量,请将数组包装到结构中:
      3. 如果可用,您可以使用array 模板:vector&lt; array&lt;wchar_t, SIZE&gt; &gt;

      选项 2 如下所示:

      struct WArray
      {
          wchar_t s[SIZE];
      };
      vector<WArray> string_list;
      

      【讨论】:

      • 数组不可赋值,这是向量类型的要求。
      【解决方案3】:

      很遗憾,由于数组类型有很多奇怪之处,原始数组不符合* std::vector 对元素类型的要求。

      如果你真的想要固定大小的数组,你应该使用std::array&lt;wchar_t,SIZE&gt;,因为std::array 模板修复了原始数组的问题,而是生成了像正确值一样的对象(例如,std::array&lt;wchar_t,SIZE&gt; 是可分配的,而原始数组不是)。

      但是,如果您想要字符串数据并且字符串并非都具有相同的固定大小,那么您根本不应该使用数组。你应该很可能使用std::wstring

      std::vector<std::wstring> string_list;
      


      * 除非我弄错了,根据 C++11 规范说 std::vector&lt;wchar_t[100]&gt; v(100); 实际上是合法的,因为单独这样做不会对元素类型提出任何要求,除了它是默认可构造的,哪些数组是。然而,使用v 做任何有用的事情确实需要比数组提供的更多元素类型。

      【讨论】:

        猜你喜欢
        • 2020-03-19
        • 2013-04-30
        • 2012-10-23
        • 2020-02-02
        • 2012-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多