C ++成员函数名为begin()问题

时间:2011-05-14 17:42:21

标签: c++

假设:

vector<string> mvec; 

上面有一些元素

部分代码:

for(vector<string>::iterator it1 = mvec.begin(); it1 != mvec.end(); ++it1) {  
for(string::iterator it2 = it1->begin(); it2 != it1->end(); ++it2)

自:

it1-&gt; begin()deference对象,然后调用该对象的成员函数begin(),该对象是it1指向?

的字符串?

5 个答案:

答案 0 :(得分:5)

it1指向存储在向量中的字符串类的实例。

答案 1 :(得分:5)

由于it1iterator vector<string>,因此当您取消引用它时,您将获得string

答案 2 :(得分:2)

此代码:

#include <vector>
#include <string>
#include <iostream>
using namespace std;

int main() {
    vector <string> mvec;
    mvec.push_back("foo");
    mvec.push_back("bar");
    for(vector<string>::iterator it1 = mvec.begin(); it1 != mvec.end(); ++it1) {  
        for(string::iterator it2 = it1->begin(); it2 != it1->end(); ++it2) {
            cout << * it2 << endl;
        }
    }
}

打印:

f
o
o
b
a
r

第一个迭代器使您可以访问向量中的字符串,第二个使用字符串中的字符。

答案 3 :(得分:1)

是的,它是string,它也是一个容器,所以取消引用it2可以获得它的个性化字符。

答案 4 :(得分:1)

就像其他人所说的那样,取消引用it1会得到string。考虑到it1不是指针,但iterator类重载operator->,这可能看起来很奇怪,在这种情况下,所有投注都将关闭将发生的事情。