是否有用于迭代向量的函数,而不管其类型如何?



在我的程序中,我循环了多个向量,例如:

std::vector<Config*>::iterator itbegin = configs_with_new_parameters.begin();
std::vector<Config*>::iterator itend = configs_with_new_parameters.end();
for (auto i = itbegin; i < itend; ++i)
{
Config* config = (*i);
addParameterData(config);
}

最好有一个我可以调用的函数来迭代任何向量类型,而不仅仅是 Config*,如本例所示:

Config* IterateVector(std::vector<Config*> *list)
{
std::vector<Config*>::iterator itbegin = list->begin();
std::vector<Config*>::iterator itend = list->end();
for (auto i = itbegin; i < itend; ++i)
{
return *i; //??
}
}

对于每次迭代,都需要执行一些操作。以某种方式返回每次迭代并在函数外部执行操作是否正确?

提前对不起,模棱两可。

编写一个接受任何类型的向量的函数很容易。

template<typename T>
void doStuff(std::vector<T>& data)
{
// Stuff
}

使用基于范围的范围在矢量上循环很容易:

for(auto& item: data)
{
// Do stuff
}

如果要将函数应用于向量中的每个项,可以将函子作为参数传递给函数。调用函数时,您只需使用 lambda 来定义函子。

template<typename T, typename A>
void doStuffWithFunc(std::vector<T>& data, A&& action)
{
for(auto& item: data)
{
action(item);
}
}

然后你可以这样称呼它:

std::vector<int>   data {1,2,3,4,5,6};
doStuffWithFunc(data, [](int val){std::cout << val << "n";});

相关内容

最新更新