我想传递一个函数std :: vector但我不想复制整个向量。我只想将地址传递给矢量。所以我尝试使用指针,我发现我不能使用括号来访问我想要的向量中的哪个元素。我怎么做?这来了我错误“
cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'
“
#include <iostream>
#include <vector>
using namespace std;
void f(vector<int>* x);
int main()
{
vector<int>a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
a.push_back(5);
f(&a);
return 0;
}
void f(vector<int>* x)
{
int i;
for(i=0;i<x->size();i++)
cout<<x[i];
}
答案 0 :(得分:3)
改变这个:
cout << x[i];
到此:
cout << (*x)[i];
甚至更好:
cout << x->at(i);
因为x
是向量的指针。
但你还不知道吗?我的意思是您使用的是x->size()
,而不是x.size()
...
但是,为什么要传递指向函数的指针?引用会很好,并且可以让你的函数正文在你的问题中正常工作。因为你只是打印,一个const引用,会很好,就像这样:
void f(const vector<int>& x)
{
// same body as in your question
}
与您的问题无关,但您的编译器应该为您的for循环生成此类警告:
warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type {aka long unsigned int}' [-Wsign-compare]
for(i=0;i<x->size();i++)
~^~~~~~~~~~
通过将i
声明为unsigned int
或size_t
来修复此问题。
答案 1 :(得分:0)
在这种情况下,您应该传递const
引用,而不是原始指针:
void f(const vector<int> &x)
{
int i;
for(i=0;i<x.size();i++)
cout<<x[i];
}
并在不接收地址的情况下调用它:
f(a);
这也可以消除代码中的另一个问题,在解除引用之前,您应该检查f()
的{{1}}的传递指针。