在我的程序中,我循环了多个向量,例如:
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";});