我不知道如何填充数组
I can't figure out how to fill an array
我试图用传入值填充给定数组,所以如果我想要一个数组全部为12个它会简单地把所有元素都换成12。这个函数的原型是这样的:
void fill(T *left, T *end, T fill)
这个函数的驱动程序是这样的:
static void TestFill1(void)
{
cout << "***** Fill1 *****" << endl;
int i1[10];
int size = 10;
fill(i1, i1 + size, 12);
display(i1, i1 + size);
}
我遇到了一个问题,我得到了一个未初始化的数组。在之前的赋值中,我一直遍历数组直到最后。在这种情况下,我得到了一个未初始化的数组,这使得我的T *end和T *left相同。我不熟悉如何遍历传入的数组
我正在尝试这样做:
template <typename T>
void fill(T *left, T *end, T fill)
{
int i = sizeof(*left) / sizeof(*(left + 0));
while(*(left + i) != *end)
{
*(left + i) = fill;
++i;
}
}
我不允许在这个赋值中使用下标或for循环,#include和std::vector一样是禁止的。
变量i
,表示相对于第一个元素的偏移量,应该从0开始:
int i = 0;
循环条件检查数组元素的值是否等于末尾数组元素的值。
while(*(left + i) != *end)
正确的版本如下:
while(left + i != end)
检查指针 (left + i)
是否到达终点。
您的声明
int i = sizeof(*left) / sizeof(*(left + 0));
可能不像你想象的那样。
sizeof()
函数对普通指针的作用与对数组声明的作用不同:
size_t s = sizeof(*left); // Will evaluate to sizeof(T)
,
int i1[10];
size_t s = sizeof(i1); // Will evaluate to sizeof(int) * 10
你的代码可以简单地修改如下:
template <typename T>
void fill(T *left, T *end, T fill) {
T* cur = left;
while(cur < end) {
*cur = fill;
++cur;
}
}
http://www.cplusplus.com/reference/vector/vector/assign/
#include <vector>
int main ()
{
std::vector<int> first;
first.assign (10,12); // 10 ints with a value of 12
return 0;
}
这是真正的男人怎么做™。哈哈,对不起,我忍不住了。
相关文章:
- C++ 填充数组时遇到问题
- 如何使用同时设置计数和填充数组的函数
- 如何使填充数组的函数发送到函数?而不是其参数中的数组
- 如何使用文件填充数组并将其与用户输入C 进行比较
- 使用 memset 填充数组会显示垃圾
- Visual Studio从文件中填充数组时中断
- 分段 填充数组时出错
- 用不同的值填充数组/矢量的边缘和中心
- 使用相同的数据填充数组对象或使用指针
- 是否可以使用三元运算符"?"在 C/C++ 中填充数组列表?
- 填充数组(写入位置0x00000000的访问冲突)
- 从文件中读取输入并填充数组以存储数据供以后使用
- c++当循环在填充数组时没有正确终止时,希望能帮助退出此循环
- 填充数组会导致数组周围的堆栈损坏
- Cuda有效地将数据插入到未排序的填充数组中
- 填充数组的 C++ 函数
- 访问部分填充数组上的第一个打开元素
- 将一个字节数组从C#传递到C++填充数组的C++com对象中
- 如何使用向量中的信息填充数组并从数组中选择随机项
- C,填充数组使用dec2bin转换器