遍历字符串的嵌套向量

发布于 2024-10-10 11:08:36 字数 849 浏览 4 评论 0原文

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

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

There's an issue in my code with nested vectors of strings. It is not printing the strings.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

翻了热茶 2024-10-17 11:08:36

这与向量无关。

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

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

只需将字符串存储在向量中。这就是你应该如何使用它们。 .c_str() 的存在实际上只是为了让您可以使用旧版 C 代码。

This has nothing to do with the vectors.

You are creating temporary std::string objects, getting pointers to their underlying data, and trying to use those pointers after the strings no longer exist. That is not allowed.

(Also, feeding '*x' to std::cout, where 'x' is a char const*, would print only the first character of the C-string.)

Just store the strings in the vectors. That's how you're meant to use them. .c_str() really only exists so you can work with legacy C code.

感性 2024-10-17 11:08:36

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

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

I confirm @Karl. Change your code in C style:

vcp.push_back("abcd");
vcp.push_back("efgh");
vcp.push_back("ijkl");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文