我怎样才能在c ++中迭代字符串向量?

时间:2017-11-30 08:45:50

标签: c++ string file vector c-strings

我想在c ++中迭代字符串向量。我想用fopen打开列表中的每个项目。

const char *filep //fopen needs a constant char pointer.
for (vector<string>::iterator it = filelist.begin(); it != filelist.end(); it++)
{
    filep = (const char *)it; //This isn't working. How can I fix this
    fopen(filep, "rb"); 
}

4 个答案:

答案 0 :(得分:6)

您应该使用it->c_str()因为it本质上是{em>指针到std::vector中的元素。但为了更轻松的生活使用

for (const auto& s : filelist){
    // s is a const reference to an element in filelist
    // use s.c_str() if you need the character buffer
}

从C ++ 11开始,这是有效的。使用const auto&而不是auto可以避免std::string副本。

答案 1 :(得分:2)

改变这个:

"Always"

到此:

filep = (const char *)it;

然而,你做了额外的,不必要的步骤,因为你可以这样做:

filep = it->c_str();

将代码的行数减少到只有两行,并且不使用额外的指针。

PS:可以在Bathsheba's answer中找到更现代的方法,或使用auto&& approach

答案 2 :(得分:0)

std::string是一种与const char *完全不同的类型。因此,您需要将基础character buffer存储在字符串中。为此,您必须使用方法std::string::c_str()std::string::data(),无论您喜欢什么。

如下所示(灵感来自现在使用range-based for-loop的其他答案),

const char *filep //fopen needs a constant char pointer.
for (auto & str : filelist)
{
    filep = str.c_str();
    fopen(filep, "rb"); 
}

答案 3 :(得分:0)

创建一个方法getstring,在其中返回字符串。

for(unsigned int i=0; i<iterator.size();i++){
cout << iterator[i]->getstring()<<endl;
}