将数据从数组切换到向量

时间:2015-07-24 08:18:49

标签: c++ function vector

我正在尝试将我的数组转换为矢量,但我在打印时遇到问题。 它在我的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);
}

4 个答案:

答案 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个错误:

  1. 在函数a2v中,实例化了长度为n的0向量,然后推回了其他元素;

  2. 您没有在主要内部定义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