遍历嵌套的字符串向量

时间:2011-01-06 09:35:25

标签: c++ string vector cstring

我的代码中存在一个嵌套字符串向量的问题。它不打印字符串。

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

2 个答案:

答案 0 :(得分:6)

这与载体无关。

您正在创建临时 std::string对象,获取指向其基础数据的指针,并在字符串不再存在后尝试使用这些指针 。这是不允许的。

(另外,将'* x'输入到std :: cout,其中'x'是char const *,只会打印C字符串的第一个字符。)

只需将字符串存储在向量中即可。这就是你打算如何使用它们。 .c_str()实际上只存在,因此您可以使用旧版C代码。

答案 1 :(得分:1)

我确认@Karl。在 C样式中更改代码:

vcp.push_back("abcd");
vcp.push_back("efgh");
vcp.push_back("ijkl");