2011-01-06 3 views
2

В моем коде есть проблема с вложенными векторами строк. Он не печатает строки.Обход вложенных векторов строк

void foo(vector<vector<char const *> > const & vcp){ 
    vector<vector<char const *> >::const_iterator i(vcp.begin()); 
    vector<vector<char const *> >::const_iterator e(vcp.end()); 

    for(; i != e; ++i){ 
     vector<char const *>::const_iterator ci(i->begin()); 
     vector<char const *>::const_iterator ce(i->end()); 
     for(; ci != ce; ++ci) 
     cout<<*ci<<endl; //Not printing 
    } 
} 

int main(){ 
    std::vector<vector<char const *> > vvcp(3); 
    std::vector<char const *> vcp(3); 
    vcp.push_back(string("abcd").c_str()); 
    vcp.push_back(string("efgh").c_str()); 
    vcp.push_back(string("ijkl").c_str()); 

    vvcp.push_back(vcp); 
    vvcp.push_back(vcp); 
    foo(vvcp); 
    return EXIT_SUCCESS; 
} 

ответ

6

Это не имеет никакого отношения к векторам.

Вы создаете временныхstd::string объектов, получать указатели на лежащих в их основе данных, и пытаетесь использовать эти указатели после строки больше не существует. Это недопустимо.

(Кроме того, кормление «* х» в StD :: COUT, где «х» представляет собой символ сопз *, будет печатать только первый символ C-строки.)

Просто хранить строки в векторы. Вот как вы собираетесь использовать их. .c_str() действительно существует, поэтому вы можете работать с устаревшим кодом C.

+0

Отлично! Спасибо. – badmaash

1

Подтверждаю @ Карл. Измените свой код в C style:

vcp.push_back("abcd"); 
vcp.push_back("efgh"); 
vcp.push_back("ijkl"); 
Смежные вопросы