我的代码中存在嵌套字符串 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/