【问题标题】:Vector of named vectors results in compiler errors命名向量的向量导致编译器错误
【发布时间】:2014-09-17 16:25:46
【问题描述】:

我正在尝试创建一个向量,每个向量都具有预定义的大小。我本能的第一次尝试是这样做(在 C++ Builder XE2 中,UnicodeString 是在其组件中使用的字符串类等。假设 Expression 是 UnicodeString 并且 Length() 返回它包含的字符数):

        vector <UnicodeString> StringVector ('\0',2);     
        vector <StringVector> ExpressionArray(Expression.Length());

但是我的编译器讨厌这个。它有什么问题?

另一个选项是这样的:

  vector <vector <UnicodeString> > ExpressionArray(Expression.Length());

但是,我得到一个 Expression.Length() 空向量的元素向量,而不是 2 元素空字符串向量的 Expression.Length() 元素向量。

我想我可以使用 resize 语句,但我不确定如何使用二维向量执行此操作。

我怎么写这样的东西?

以下代码在左大括号后的第一行引发异常:

for (int i=0;i<Expression.Length();i++)
    {
        ExpressionArray[0][i]=Expression.SubString(i+1,1); //i+1 because UnicodeStrings are 1-based
        ExpressionArray[1][i]="B";
        OnClickStatusInfo->Lines->Add(ExpressionArray[0][i])+"\t"+ExpressionArray[1][i];
    }

怎么了?令我震惊的是,我可能误用了下标运算符。

非常感谢,

斯巴灵顿利

【问题讨论】:

    标签: c++ vector


    【解决方案1】:
    vector <UnicodeString> StringVector ('\0',2);     
    vector <StringVector> ExpressionArray(Expression.Length());
    

    但是我的编译器讨厌这个。它有什么问题?

    StringVector 是可变的,当vector 期望在&lt;&gt; 中有类型时。

    【讨论】:

      【解决方案2】:

      向量ctor有4种形式(见http://www.cplusplus.com/reference/vector/vector/vector/

      从参数的数量来看,您的意思是第二个,“填充”构造函数。

      vector &lt;UnicodeString&gt; StringVector ('\0',2);

      您的第一次尝试看起来好像交换了大小和值参数。即使你交换了参数,你的 UnicodeString 也应该有一个构造函数,它接受一个 char - 这看起来很奇怪,但它可能不能。

      vector &lt;StringVector&gt; ExpressionArray(Expression.Length());

      如果Expression.Length() 的返回类型与vector::size_type 兼容,您的第二次尝试应该可以工作,StringVector 具有默认构造函数和复制构造函数。也许这些条件之一不成立。

      【讨论】:

        猜你喜欢
        • 2022-10-20
        • 1970-01-01
        • 2021-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-14
        • 2021-11-28
        相关资源
        最近更新 更多