簡體   English   中英

C ++成員函數名為begin()問題

[英]C++ member function called begin() question

假如說:

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-> begin()deference對象,然后調用該對象的成員函數begin(),哪個對象是it1指向?

串?

it1指向存儲在向量中的字符串類的實例。

由於it1vector<string>iterator ,當你解除它時,你會得到一個string

這段代碼:

#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

第一個迭代器使您可以訪問向量中的字符串,第二個使用字符串中的字符。

是的,它是string ,它也是一個容器,所以取消引用it2會得到它的個別字符。

像其他人所說的那樣,取消引用it1會給你一個string 它可能看起來很奇怪,因為it1不是一個指針,但iterator類重載了operator-> ,在這種情況下,所有的賭注都將關閉將要發生的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM