如何在C ++中声明wchar_t []的向量?

时间:2013-03-15 23:09:05

标签: c++ vector wchar-t

我需要在包含wchar_t的c-string的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]}»

我做错了什么? 为什么我会收到这样的错误?

3 个答案:

答案 0 :(得分:5)

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

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

但是,如果你想要字符串数据并且字符串不是全部都是相同的固定大小,那么你根本就不应该使用数组。您最有可能使用std::array<wchar_t,SIZE>

std::wstring


*除非我弄错了,根据C ++ 11规范说std::vector<std::wstring> string_list; 实际上是合法的,因为单独执行此操作不会对元素类型提出任何要求,除非它是默认的可构造的,哪个数组是。但是,对std::vector<wchar_t[100]> v(100);执行大多数有用的事情确实需要元素类型比数组提供的更多。

答案 1 :(得分:2)

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

struct WCharArray
{
  wchar_t a[SIZE];
};

vector<WCharArray> string_list(100);

答案 2 :(得分:2)

你不能制作数组的vector,因为数组很奇怪。

您可以选择多个选项:

  1. 如果你的字符串是静态的,你可以使用指针向量vector<wchar_t*>
  2. 如果你真的需要一个数组向量,请将数组包装成一个结构:
  3. 如果可用,您可以使用array模板:vector< array<wchar_t, SIZE> >
  4. 选项2如下所示:

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