将数据从数组切换到向量

Posted

技术标签:

【中文标题】将数据从数组切换到向量【英文标题】: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 函数中可见。 这个问题确实满足:“寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及重现它所需的最短代码问题本身” - 所以投票保持开放。 【参考方案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 个错误:

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

    您没有在 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

【讨论】:

以上是关于将数据从数组切换到向量的主要内容,如果未能解决你的问题,请参考以下文章

从最小堆切换到最大堆而不重新排列内部数组

iOS:从 JSON 切换到 CoreData 以保持本地持久数据;这实用吗?数组内字典 数组内字典

UITableView - 从两个数组切换数据

如何将 4 个浮点数的 ps 向量转换为 4 个双精度数并存储到 pd 数组?

大数组的堆栈溢出但没有同样大的向量?

延迟切换uiviews