c++ - 遍历嵌套的字符串 vector

标签 c++ string vector cstring

我的代码中存在嵌套字符串 vector 的问题。它不打印字符串。

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

最佳答案

这与 vector 无关。

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

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

只需将字符串存储在 vector 中。这就是您打算使用它们的方式。 .c_str() 实际上只是为了让您可以使用遗留 C 代码而存在。

关于c++ - 遍历嵌套的字符串 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4613498/

相关文章:

r - 两个向量的所有可能组合,同时保持 R 中的顺序

c++ - 将 SetPixel 坐标转换为控制台上的像素

c++ - 我在理解如何使用队列时遇到问题

c++ - Visual Studio 2012 中的 OpenGL 未解析的外部符号 _gluLookAt@72 和 _gluPerspective@32

java - Android 字符串替换全部不起作用

string - 如何通过静态方法在 clojure 中进行 comp ?

python - 如何动态解析Python字符串模板?

java - Java中如何按多个字段对对象进行排序?

c++ - 无法构建 PortAudio - "LNK1104: cannot open file ' ksguid.lib'"

r - 从命名向量中删除名称,仅获取值