2016-05-12 7 views
-1

У меня есть 2D-вектор vector<vector<int> > det;, и я хочу присвоить последнее значение или последнее значение push_back d другому другому вектору 2D v.
Это то, что я попытался v = *(det.rbegin());, но он показывает ошибку. Каков правильный способ сделать это? сообщение
ошибки: преобразование из «станд :: вектор» к нескалярный типа «станд :: вектор>» просилОтмена итератора на двумерный вектор и присвоение его значения другому двумерному вектору

+1

Рассмотрите прочитав сообщение об ошибке. – user2079303

+0

@ user2079303 Я уже прочитал сообщение об ошибке, но что означает 'std :: vector>'? – user6291111

+0

Предоставьте весь код, пожалуйста. –

ответ

1

Последняя запись в 2D-массив не является 2D массив, т.е. типа вектора < < вектора int>>, но типа vector < int>.

Как таковой, он не может быть назначен на другую переменную типа

вектор < вектор < Int>>

Это прекрасно работает:

#include<iostream> 
#include<vector> 

int main(){ 
    std::vector<std::vector<int> > det, det2; 
    std::vector<int> vector1, vector2, vector3; 

    vector1.push_back(3); 
    vector1.push_back(4); 
    vector1.push_back(5); 

    vector2.push_back(13); 
    vector2.push_back(14); 
    vector2.push_back(15); 

    vector3.push_back(113); 
    vector3.push_back(114); 
    vector3.push_back(115); 

    std::vector<int> member_of_2darray; 

    det.push_back(vector1); 
    det.push_back(vector2); 
    det.push_back(vector3); 

    det2.push_back(det.back()); 

    std::cout<<det2[0][2]<<std::endl; // returns 115 

    //last:element 
    std::cout<<det.back().back()<<std::endl; 


} 

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

#include<iostream> 
#include<vector> 

int main(){ 
    std::vector<std::vector<int> > det, det2; 
    std::vector<int> vector1, vector2, vector3; 

    std::vector<std::vector<int> >::iterator it; 

    vector1.push_back(3); 
    vector1.push_back(4); 
    vector1.push_back(5); 

    vector2.push_back(13); 
    vector2.push_back(14); 
    vector2.push_back(15); 

    vector3.push_back(113); 
    vector3.push_back(114); 
    vector3.push_back(115); 

    std::vector<int> member_of_2darray; 

    det.push_back(vector1); 
    det.push_back(vector2); 
    det.push_back(vector3); 

    it = det.end(); 

    det2.push_back(*(it-1)); 

    std::cout<<det2[0][2]<<std::endl; //output: 115 


} 
+0

Я хочу извлечь значение последнего элемента det, но размер det неизвестен. – user6291111

+0

Последний элемент det.back(). Или, с итератором, последний элемент - * (it - 1). –

+0

Проблема была с возвратным типом * (det.rbegin()), который является вектором , как вы упомянули в своем ответе, но приведенные примеры никоим образом не связаны с ответом. – user6291111