2014-09-17 4 views
1

Я пытаюсь создать вектор векторов, каждый с предопределенным размером. Моя инстинктивная первая попытка была сделать (в C++ Builder XE2 UnicodeString класс строка, используемая в ее компонентах и ​​т.д. Предположим, что выражение является UnicodeString и Length() возвращает количество символов в нем):Вектор из названных векторов приводит к ошибкам компилятора

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

Но мой компилятор ненавидит это. Что с этим не так?

Другой вариант заключается в следующем:

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

Но вместо Expression.Length() - элемент вектора 2-элементных пустыми строки векторов Я получаю Expression.Length() - элемент вектора пустых векторов ,

Я предполагаю, что могу использовать оператор изменения размера, но я не уверен, как это сделать с двумерными векторами.

Как мне все-таки написать что-нибудь подобное?

Следующий код генерирует исключение, на первой линии после открывающей скобки:

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]; 
    } 

Что случилось? Меня поражает, что я, возможно, неправильно использовал операторов индексов.

Спасибо большое,

sbarringtonleigh

ответ

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

Но мой компилятор ненавидит это. Что с этим не так?

StringVector является переменной, когда vector ожидает иметь тип в <>.

1

Есть 4 формы вектора CTOR (см http://www.cplusplus.com/reference/vector/vector/vector/)

Судя по количеству аргументов, вы имели в виду второе, «заполнить» consructor.

vector <UnicodeString> StringVector ('\0',2);

Ваша первая попытка выглядит так, как если бы вы поменяли размер и аргументы значения. Даже если вы замените аргументы, ваш UnicodeString должен иметь конструктор, который принимает один char - который выглядит странно, и, вероятно, он не может.

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

Ваша вторая попытка должна работать, при условии, что тип возвращаемого Expression.Length() совместим с vector::size_type, StringVector имеет конструктор по умолчанию и конструктор копирования. Возможно, одно из этих условий не выполняется.

Смежные вопросы