Скопировать вектор в массив?

0

Я скопировал массив 2dim в вектор 2dim, и я сделал некоторые изменения на нем, теперь я хочу знать, как я могу скопировать вектор 2dim в массив 2dim? (Я сделал следующее:

Скопируйте массив 2dim в вектор 2dim:

vector< vector<int>> path2;
 vector<int> temp; // For simplicity
 for (int x = 0; x <= 1; x++)
{temp.clear();
    for (int y = 0; y < 4; y++)
    {
        temp.push_back(path1[x][y]);
    }
    path2.push_back(temp);

}

вывод:

path2[0][6,0,2,6]
path2[1][6,1,3,6]

Скопируйте вектор 2dim в массив 2dim

int arr [4][10] ;
 copy(path3.begin(), path3.end(), arr);

распечатать

 for (int i=0;i< ???? ;i++)// how to define size of the vector first dimention which is 2 ( i am aware about size() for 1 dim vector, but for 2dim vector ...... ??????????
     for(int j=0;j<?????; j++) //same prolem as above
         cout<<endl<<arr[i][j];

Проблема в том, что я не уверен в части копии, и я не знаю, как определить размер каждого размера вектора?

  • 4
    Время сделать шаг назад и определить некоторые ответы. Вектор произвольно доступен с помощью оператора [] , наряду со многими другими функциями и встроенными функциями-членами. В чем причина обратного преобразования в более простой массив, если вы можете распечатать векторное содержимое с помощью итераторов и / или использовать функцию-член size мере необходимости / по желанию? Даже range for C ++ 11 и ключевое слово auto могут использоваться, если используемый компилятор поддерживает стандарт C ++ 11.
  • 0
    @CPlusPlusOOAandD, чтобы быть справедливым, даже массивы в стиле C могут использоваться в range for циклов.
Показать ещё 6 комментариев
Теги:
arrays
vector

1 ответ

4
Лучший ответ

Вы можете сделать любой из них, чтобы перебрать вектор вектора:

//Works for C++11
std::vector<std::vector<int>> vec;
for(auto &i : vec)
   for(auto &j : i)
      std::cout << j << std::endl;

//Works for C++11
for (auto iter = vec.cbegin(); iter != vec.cend(); ++iter)
    for(auto sub_iter = iter->cbegin(); sub_iter != iter->cend(); ++sub_iter)
       std::cout << *sub_iter << std::endl;

//Works for C++03 and C++11
typedef std::vector<std::vector<int> >::iterator Iter;
typedef std::vector<int>::iterator Sub_Iter;
for (Iter iter = vec.begin(); iter != vec.end(); ++iter)
    for(Sub_Iter sub_iter = iter->begin(); sub_iter != iter->end(); ++sub_iter)
       std::cout << *sub_iter << std::endl;


//works for C++03 and C++11
for(int i = 0; i<vec.size(); ++i)
    for(int j = 0; j < vec[i].size(); ++j)
       std::cout << vec[i][j] << std::endl;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню