是否可以将向量的一部分作为向量发送到函数?

A. *_*ghi 4 c++ vector pass-by-reference

我想看看是否可以将部分向量传递给函数,使其显示为函数的法线向量.更重要的是,我希望在O(1),恒定时间内完成.我不想迭代向量来创建一个新的向量.实际上,我还希望在以下示例中将新矢量的大小更改为40.

void func(vector <int> &v){

    //calling index 10  to 50 of v
    func(v[10..50])
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*end 5

使用迭代器作为基于范围的函数的参数,并传递所需的范围.你的函数代码变成了

funcWithRange(v.cbegin()+10, v.cbegin()+50);
Run Code Online (Sandbox Code Playgroud)

带功能签名

void funcWithRange(std::vector<int>::const_iterator first, std::vector<int>::const_iterator last)
Run Code Online (Sandbox Code Playgroud)

这可以通过将此成为具有vector成员类型作为其模板参数的函数模板来推广,或者进一步扩展到支持此类范围迭代的任何容器.正如评论中所指出的,<algorithm>有很多这种模式的例子.

std::distance(first, last);将返回所需的改变大小.我不认为你可以在不制作实物副本的情况下更接近满足你的要求.

  • @ A.Mashreghi是的,使用`std :: pair <std :: vector <int> :: iterator,std :: vector <int> :: iterator>`. (3认同)