将迭代器传递给函数

时间:2013-04-25 06:00:59

标签: c++

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

这是正确的做法:

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;
    }

3 个答案:

答案 0 :(得分:3)

该行:

string value = DoSomething(it)

应该是:

string value = DoSomething(*it);

答案 1 :(得分:2)

  

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

string value = DoSomething(it);

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

string DoSomething(MyObject* a)

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

string value = DoSomething(*it);

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

string DoSomething(vector<MyObject*>::iterator i)
{
     if ((*i)->isvalid())
         ...
}

答案 2 :(得分: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);
    }  
}

您可以在行动here中看到它。