我正在尝试将我的数组转换为矢量,但我在打印时遇到问题。 它在我的for循环中的int main()中表示v未定义。当我定义 矢量v;在int main()中,程序编译并运行但没有打印任何内容。我究竟做错了什么?
#include <iostream>
#include <vector>
using namespace std;
vector<int> a2v(int x[], int n)
{
vector<int> v(n);
for(int i = 0; i < n; i++)
{
v.push_back(x[i]);
}
return(v);
}
int main()
{
vector<int> a2v(int x[], int n);
int array[] = {11,12,13,14,15,16,17,18};
a2v(array, 8);
for(int i = 0; i < v.size(); i++)
{
cout << v[i] <<" ";
}
cout << endl;
return(0);
}
答案 0 :(得分:2)
这是你的程序更正:
#include <iostream>
#include <vector>
using namespace std;
vector<int> a2v(int x[], int n)
{
vector<int> v(0);
v.reserve(n); //optional
for(int i = 0; i < n; i++)
{
v.push_back(x[i]);
}
return(v);
}
int main()
{
int array[] = {11,12,13,14,15,16,17,18};
auto v = a2v(array, 8);
for(size_t i = 0; i < v.size(); i++)
{
cout << v[i] <<" ";
}
cout << endl;
return(0);
}
有2个错误:
在函数a2v
中,实例化了长度为n的0向量,然后推回了其他元素;
您没有在主要内部定义v
,作为a2v
的返回值
答案 1 :(得分:1)
您要阅读的向量是a2v
函数的返回值。
但是从C数组到矢量数组还有很多简单,我在这里找到了矢量引用网页的例子: http://www.cplusplus.com/reference/vector/vector/vector/
int myints[] = {16,2,77,29};
std::vector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) );
答案 2 :(得分:0)
定义变量(例如矢量v)时,始终在某个范围内执行此操作。诸如a2v或main之类的函数的主体是可能范围的示例。因此,如果您只在函数a2v中执行此操作,那么它是唯一可见的范围。
答案 3 :(得分:0)
它在我的for循环中的int main()中表示v未定义。
好吧,因为v
main()
a2v(array, 8);
上面的函数调用返回一个向量,因此你需要收集返回的向量,如
vector<int> v=a2v(array,8)
此外,
vector<int> v(n);//creates a vector of size n
for(int i = 0; i < n; i++)
{
v.push_back(x[i]);//adds n more elements to the vector
}
返回的向量包含2n
个元素,而不是n
最后,你可以直接从数组中创建一个矢量
vector<int> v(arr,arr+n);//where n is the number of elements in arr