我想将数组的内容写入向量。
int A[]={10,20,30,40,50,60,70,80,90};
vector<int> my_vector;
之前我曾经使用memcpy将数组 A 的内容复制到另一个数组 B 。我想使用my_vector而不是数组 B
如何在没有for循环的情况下一次性将数组 A 的内容写入my_vector?
答案 0 :(得分:6)
使用C ++ 2011,您想要使用
std::copy(std::begin(A), std::end(A), std::back_inserter(my_vector));
......或
std::vector<int> my_vector(std::begin(A), std::end(A));
......或者,实际上:
std::vector<int> my_vector({ 10, 20, 30, 40, 50, 60, 70, 80, 90 });
如果您没有C ++ 2011,则需要定义
namespace whatever {
template <typename T, int Size>
T* begin(T (&array)[Size]) { return array; }
template <typename T, int Size>
T* end(T (&array)[Size]) { return array + Size; }
}
并使用whatever::begin()
和whatever::end()
以及前两种方法之一。
答案 1 :(得分:4)
#include <algorithm>
#include <vector>
int main() {
int A[]={10,20,30,40,50,60,70,80,90};
std::vector<int> my_vector;
unsigned size = sizeof(A)/sizeof(int);
std::copy(&A[0],&A[size],std::back_inserter(my_vector));
}
C ++ 11更简单。
#include <vector>
#include <algorithm>
int main() {
int A[]={10,20,30,40,50,60,70,80,90};
std::vector<int> my_vector(std::begin(A),std::end(A));
}
答案 2 :(得分:3)
您可以使用memcpy
,或在C ++ 98/03中使用此类初始化。
int A[]={10,20,30,40,50,60,70,80,90};
vector<int> my_vector(A, A + sizeof(A) / sizeof(*A));
您也可以使用算法,例如copy
。
std::copy(A, A + sizeof(A) / sizeof(*A), std::back_inserter(my_vector));
在C ++ 11中,使用std::begin(A)
,std::end(A)
作为数组的开头和结尾。