将数组转换为向量最简单的方法是什么?将数组转换为向量最简单的方法是什么?
void test(vector<int> _array)
{
...
}
int x[3]={1, 2, 3};
test(x); // Syntax error.
我想用最简单的方法将int数组中的x转换为向量。
将数组转换为向量最简单的方法是什么?将数组转换为向量最简单的方法是什么?
void test(vector<int> _array)
{
...
}
int x[3]={1, 2, 3};
test(x); // Syntax error.
我想用最简单的方法将int数组中的x转换为向量。
使用vector
构造函数,两个迭代器,请注意指针是有效的迭代器,并使用隐式转换从数组的指针:
int x[3] = {1, 2, 3};
std::vector<int> v(x, x + sizeof x/sizeof x[0]);
test(v);
或
test(std::vector<int>(x, x + sizeof x/sizeof x[0]));
其中sizeof x/sizeof x[0]
明显3
在这方面;这是获取数组中元素数量的通用方法。请注意0指向一个元素超出最后一个元素。
指针可以像任何其他迭代器一起使用:
int x[3] = {1, 2, 3};
std::vector<int> v(x, x + 3);
test(v)
在现实生活中,您可能想要抽象出数组大小,例如使用'const size_t X_SIZE = 3;'来表示数组大小,或者从sizeof计算它。为了便于阅读,我省略了该部分。 – 2012-01-08 12:50:43
就个人而言,我很喜欢C++ 2011的方法,因为它既不要求您使用sizeof()
也不记得调整数组边界,如果你改变数组边界(你可以在C中定义,如果你想++ 2003中的相关功能,太):
#include <iterator>
#include <vector>
int x[] = { 1, 2, 3, 4, 5 };
std::vector<int> v(std::begin(x), std::end(x));
显然,与C++ 2011你可能仍要使用初始化列表:
std::vector<int> v({ 1, 2, 3, 4, 5 });
它复制数组还是只是指向它?我关注性能 – 2012-11-07 18:06:21
'std :: vector
因此,如果我想连接一个C++和一个C库,并从C数组复制到矢量并返回,没有办法支付2个副本的处罚?(我正在使用eigen库和gsl) – 2012-11-08 00:14:08
你在这里提出错误的问题 - 而不是强迫所有事情成为一个向量,问你如何将测试转换为迭代器而不是特定的容器。你可以为了保持兼容性提供过载过(并且同时免费办理其他容器):
void test(const std::vector<int>& in) {
// Iterate over vector and do whatever
}
变为:
template <typename Iterator>
void test(Iterator begin, const Iterator end) {
// Iterate over range and do whatever
}
template <typename Container>
void test(const Container& in) {
test(std::begin(in), std::end(in));
}
它可以让你做的事:
int x[3]={1, 2, 3};
test(x); // Now correct
“,而不是强迫所有东西进入向量,询问如何将测试转换为使用迭代器而不是特定容器。”为什么这更好? – aquirdturtle 2016-02-02 20:23:38
@aquirdturtle因为现在,而不是只支持载体,你支持列表和数组,并提升容器和转换迭代器和范围和.... – Flexo 2016-02-02 21:03:06
你能解释一下吗?我已经读过'vector a(5,10);'意思是为5'int'腾出空间并用10初始化它们。但是,你的x,x + ...是如何工作的?你可以解释吗? –
UnKnown
2016-01-16 07:19:38