从向量初始化数组
initizlize an array from a vector
包含与向量类型相同的元素的数组中初始化向量,例如
double a[] ={ somevalues };
std::vector<double> vec(a, a+dimension)
我想知道在没有显式循环的情况下是否可以反过来?是否可以使用上面的快捷方式从向量初始化数组,我想不会,但让我问......
不,初始化时无法执行此操作,但您可以使用 STL 中的一种算法:
std::vector<int> v = create_vector();
int array[100];
assert( v.size() >= 100 );
std::copy( v.begin(), v.begin()+100, array );
或者:
std::copy_n( v.begin(), 100, array );
断言是为了确保您不会超出向量的大小(这会导致未定义的行为),并限制副本(表达式中的 100),以便您也不会溢出数组。
是的,您可以从相同类型的数组初始化向量:
int a[] = {16,2,77,29};
vector<int> v (a, a + sizeof(a) / sizeof(*a) );
您可以使用 std::copy 将向量复制到数组中
copy( v.begin(), v.begin()+MAX_SIZE, a); // or v.end() if a is large enough to hold the whole vector
这个问题中回答的替代方案是让一个指针与 vector 的第一个变量相关联(vector 位于连续内存中):
假设以下向量:
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
我们的指针:
int *num_arr = &v[0];
优点 - 不是通过创建一个新的 vec.capacity() 大小的动态数组来加倍内存量,而是有一个指向 vec 的第一个元素的指针,您可以使用它做与普通数组相同的事情,只是你必须传递大小,但无论如何你不能通过 sizeof(array)/sizeof(*array) 估计动态分配数组的大小。
调用函数:
print_out_array(&v[0], v.size());
你可以有一个打印出"数组"的函数:
print_out_array(const int* array, std::size_t size){
cout << "Printing out array:" << endl;
for (int i=0; i != size; ++i){
cout << "i: " << i << ", value: " << array[i] << endl;
}
}
看,在那个函数中,array[i] 就像数组一样工作,不涉及副本,没有复制开销,没有分配新内存 - 一切都很好! :)
但是,如果向量是空的,则必须小心。如果 v.size() 为零,则 &v[0] 尝试生成指向不存在的东西的指针 - 未定义的行为。更安全的方式:
if(!v.empty()){
print_array(&v[0],v.size());
}
但是要小心字符串...他们是完全不同的野兽...
要获得有关此事的完整信息,请查看Scott Meyer的有效STL第16项。了解如何将矢量和字符串数据传递到旧版 API。
No.您可以使用
double a[] = { v[0], v[1], ... };
但更容易你无法得到。
- C++使用整数的压缩数组初始化对象
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 在 Python 和 c++ 2d 数组初始化之间.这是怎麽?为什么呢?
- 字节数组初始化会导致 DirectX 崩溃
- 使用 new 和 值进行数组初始化,但没有显式数量的元素
- 运行时C++数组初始化问题
- 使用带有参数包的数组的成员数组初始化类
- 仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案
- C++ 2 个指针数组初始化 C2440
- C++结构字符数组初始化
- C++中的多维数组初始化
- constexpr数组初始化
- C++引物动态数组初始化程序的数目超过大小
- 使用std::index_sequence对std::数组初始化进行包扩展
- 当 std 数组初始化太小时,C++会引发错误吗?
- 如何确定结构数组初始化的大小?
- Qt并发错误:数组初始化需要大括号括起来的初始值设定项列表
- 此代码中的数组初始化样式是什么?这是标准的吗?
- C++ 使用数组初始化时的 STL 向量内存管理