因此,当您初始化一个数组时,您可以在一个位置为其分配多个值:
int array [] = {1,3,34,5,6}
但是如果数组已经初始化并且我想在一行中完全替换该数组中元素的值怎么办
所以
int array [] = {1,3,34,5,6}
array [] = {34,2,4,5,6}
似乎不起作用...
有办法吗?
初始化和赋值之间有区别。你要做的不是初始化,而是赋值。但这种对数组的赋值在 C++ 中是不可能的。
您可以执行以下操作:
#include <algorithm>
int array [] = {1,3,34,5,6};
int newarr [] = {34,2,4,5,6};
std::copy(newarr, newarr + 5, array);
但是,在 C++0x 中,你可以这样做:
std::vector<int> array = {1,3,34,5,6};
array = {34,2,4,5,6};
当然,如果您选择使用
std::vector
而不是原始数组。
您必须逐一替换值,例如在 for 循环中,或将另一个数组复制到另一个数组上,例如使用
memcpy(..)
或 std::copy
例如
for (int i = 0; i < arrayLength; i++) {
array[i] = newValue[i];
}
注意确保适当的边界检查和任何其他需要进行的检查,以防止出现越界问题。
我制作了一个小模板函数来方便地为原始指针赋值。
template <typename T, typename U>
void set_array(T* array, U x) {
*array = x;
}
template <typename T, typename U, typename... V>
void set_array(T* array, U x, V... y) {
*array = x;
set_array(array + 1, y...);
}
一个例子是:
int main() {
int64_t array[10] = {};
set_array(array, 11, 12, 13, 14, 15, 16);
for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i) {
std::cout << array[i] << ", ";
}
}
...它应该打印:
11, 12, 13, 14, 15, 16, 0, 0, 0, 0,
const static int newvals[] = {34,2,4,5,6};
std::copy(newvals, newvals+sizeof(newvals)/sizeof(newvals[0]), array);
您可以使用基于范围的 for 循环,如下所示:
int array[] = { 1, 3, 34, 5, 6 };
int count = 0;
for (int num : { 34, 2, 4, 5, 6 })
{
array[count++] = num;
}