【发布时间】:2015-04-24 10:47:07
【问题描述】:
我试图弄清楚是否有办法通过引用传递截断的向量,以便它仍然会更改原始向量。
这是我正在尝试做的一个简化示例。我想要矢量
x = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
函数退出时。但是,当我的代码完成时,我得到了
{ 1, 8, 7, 6, 5, 4, 3, 2, 1, 0 }.
#include <iostream>
#include <vector>
using namespace std;
void example(vector<int> &x)
{
vector<int>::iterator ii = x.begin();
vector<int>::iterator jj = x.end();
if (ii == jj) { return; }
else {
*ii = 1;
example(vector<int>(ii + 1, jj));
}
}
int main()
{
vector<int> x = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
example(x);
for (vector<int>::iterator ii = x.begin(); ii != x.end(); ii++)
cout << *ii << " ";
cout << endl;
}
有什么想法吗?
【问题讨论】:
-
您可以将
iterators传递给example,这是一个可以接受的解决方案吗? -
在您的递归中
example(vector<int>(ii + 1, jj));正在传递 temprvalue reference,这在您的情况下意义不大,我想知道它甚至可以编译吗?
标签: c++ pointers vector pass-by-reference