0

我想将指针向量的迭代器传递给函数。我不知道如何通过它。

这是正确的做法吗:

main() {
    vector<MyObject*>::iterator it;

    for (it = added.begin(); it < added.end(); it++) {    
    string value = DoSomething(it)    
    }  
}
    string DoSomething(MyObject* a)
    {    
    if (a->isValid())
        Str = "0";
    ..
    ..   
    return str;
    }
4

3 回答 3

4

该行:

string value = DoSomething(it)

应该:

string value = DoSomething(*it);
于 2013-04-25T06:02:39.740 回答
3

我想将指针向量的迭代器传递给函数。

string value = DoSomething(it);

您正在尝试正确传递它,但该函数未编写为使用迭代器:

string DoSomething(MyObject* a)

这个函数需要一个指针......你可以给它:

string value = DoSomething(*it);

或者你可以改变你的 DoSomething 功能:

string DoSomething(vector<MyObject*>::iterator i)
{
     if ((*i)->isvalid())
         ...
}
于 2013-04-25T06:08:23.263 回答
1

如果你真的想将迭代器传递给函数,它的参数也应该是一个迭代器:

#include <string>
#include <iostream>
#include <vector>

using namespace std;

string DoSomething(vector<string*>::iterator a) {
    string* entry = *a;
    cout << *entry << endl;
    return "blah";
}

int main() {
    vector<string*> added;
    string v1 = "v1";
    string v2 = "v2";

    added.push_back(&v1);
    added.push_back(&v2);

    vector<string*>::iterator it;

    for (it = added.begin(); it < added.end(); it++) {    
        string value = DoSomething(it);
    }  
}

您可以在这里看到它的实际效果。

于 2013-04-25T06:14:25.500 回答