将数据从数组切换到向量
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 以保持本地持久数据;这实用吗?数组内字典 数组内字典