【问题标题】:Traversing nested vectors of strings遍历字符串的嵌套向量
【发布时间】:2011-01-06 09:35:24
【问题描述】:

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

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

【问题讨论】:

    标签: c++ string vector cstring


    【解决方案1】:

    这与向量无关。

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

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

    只需将字符串存储在向量中。这就是你使用它们的方式。 .c_str() 确实存在,因此您可以使用遗留的 C 代码。

    【讨论】:

      【解决方案2】:

      我确认@Karl。以C 风格更改您的代码:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-27
        • 2014-01-29
        • 2019-12-01
        • 2017-07-25
        相关资源
        最近更新 更多