【问题标题】:Switching data from array to vector将数据从数组切换到向量
【发布时间】:2015-07-24 08:18:49
【问题描述】:

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

【问题讨论】:

  • 它甚至可以编译给你吗?
  • “它在我的 for 循环中的 int main() 中说 v 是未定义的”——是的,为什么它会神奇地存在,除非你声明它?
  • 我投票决定将此问题作为离题结束,因为它表明缺乏有关该语言的基础知识。 Stack Overflow 不是语言教程网站。
  • 您没有将 a2v 函数的结果存储在任何地方。在a2v 中声明v 使其仅在a2v 函数中可见。
  • 这个问题确实满足:“寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及重现它所需的最短代码问题本身” - 所以投票保持开放。

标签: c++ function vector


【解决方案1】:

这是你的程序更正:

#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. 您没有在 main 中定义 v,作为 a2v 的返回值

【讨论】:

  • @Quentin 我猜你是对的!我会编辑答案;)
  • 一时糊涂了,哈哈!
  • 看来我已经困惑很久了:-/感谢您的指正!
【解决方案2】:

您要读取的向量是a2v 函数的返回值。

但是从 C 数组到向量数组还有很多比从 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) ); 

【讨论】:

  • 为什么不用std::begin(myints)/std::end(myints) 而不是sizeof 玩杂耍?
【解决方案3】:

当你定义一个变量时,比如你的向量 v,你总是在一定的范围内做。 a2v 或 main 等函数的主体是可能作用域的一个示例。因此,如果您只在函数 a2v 中执行此操作,那将是它可见的唯一范围。

【讨论】:

    【解决方案4】:

    它在我的 for 循环中的 int main() 中说 v 是未定义的。

    这将是因为main() 中没有v

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      相关资源
      最近更新 更多