2010-04-08 3 views
0

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

Я по существу стараюсь добиться динамической итерации по массиву с переменным размером массивов с переменным размером, подобным приведенному ниже.

String *2d_array[][] = {{"A1","A2"},{"B1","B2","B3"},{"C1"}}; 

for (int i=0; i<2d_array.length; i++) { 
    for (int j=0; j<2d_array[i].length; j++) { 
     print(2d_array[i][j]); 
    } 
} 

Есть ли разумный способ сделать это? Возможно, используя вектор или другую структуру?

Спасибо :)

+2

станд :: вектор определенно было бы разумным путем здесь. –

+0

вы не можете начинать переменные с номера ... –

+0

Я изучаю C++ для bada. Оказывается, не может использовать Std :: - поэтому вместо этого используйте массив ArrayList из массива ArrayList. – adam

ответ

2

Вы используете обычный массив C строковых объектов C++. В C нет массивов с переменным размером. Кроме того, этот код вообще не будет компилироваться, в такой конструкции компилятор будет генерировать массив массивов, объявленных максимальной длиной. В случае образца, будет

String *2d_array[3][3] 

Если вы хотите массивы переменного размера, вы должны использовать STL C++ (стандартная библиотека шаблонов) -containers, такие как вектор или список:

#include <string> 
#include <vector> 

void f() 

{ 
    typedef std::vector<std::string> CStringVector; 
    typedef std::vector<CStringVector> C2DArrayType; 
    C2DArrayType theArray; 

    CStringVector tmp; 
    tmp.push_back("A1"); 
    tmp.push_back("A2"); 
    theArray.push_back(tmp); 

    tmp.clear(); 
    tmp.push_back("B1"); 
    tmp.push_back("B2"); 
    tmp.push_back("B3"); 
    theArray.push_back(tmp); 

    tmp.clear(); 
    tmp.push_back("C1"); 
    theArray.push_back(tmp); 

    for(C2DArrayType::iterator it1 = theArray.begin(); it1 != theArray.end(); it1++) 
     for(CStringVector::iterator it2 = it1->begin(); it2 != it1->end(); it2++) 
     { 
      std::string &s = *it2; 
     } 
} 
+1

неудовлетворительно в состоянии, что C++ в настоящее время, размер кода увеличился на порядок. Я с нетерпением жду того дня, когда мы можем инициализировать вектор, подобный массиву. C++ 0X, пожалуйста, сделайте шаг вперед. – daramarak

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