我想看看是否可以将向量的一部分传递给函数,以便它显示为函数的法线向量。更重要的是,我希望这可以在 O(1) 的常数时间内完成。我不想迭代向量来创建一个新向量。事实上,我还希望在下面的示例中将新向量的大小更改为 40。
void func(vector <int> &v){
//calling index 10 to 50 of v
func(v[10..50])
}
使用迭代器作为基于范围的函数的参数,并传入所需的范围。您在函数中的代码变为
funcWithRange(v.cbegin()+10, v.cbegin()+50);
带有函数签名
void funcWithRange(std::vector<int>::const_iterator first, std::vector<int>::const_iterator last)
这可以通过将其设为函数模板来概括:vector
成员类型作为其模板参数,或者更进一步到支持这种类型的范围迭代的任何容器。正如评论中指出的那样,<algorithm>
这种模式有很多例子。
std::distance(first, last);
将返回所需的更改大小。我认为如果不制作物理副本,您就无法更接近满足您的要求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)