Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;对数组的第一个和最后一个元素的迭代_C++_Arrays - Fatal编程技术网

C++ C++;对数组的第一个和最后一个元素的迭代

C++ C++;对数组的第一个和最后一个元素的迭代,c++,arrays,C++,Arrays,假设我有一个数组: int oldv[10] = {16, 12, 24, 96, 45, 22, 18, 63, 47, 56}; 还有一个像 int newv[8]; 我想从旧的的交替两端填充新的,直到满足某个条件,这样我就可以: newv = [16, 56, 12, 47, 24, 63 ...] 假设我只想输入3个旧的数字(即:16、56、12)。 我尝试了以下for循环,但当然还不够 for(int i = 0; i < 3; i++) newv[i] = o

假设我有一个数组:

int oldv[10] = {16, 12, 24, 96, 45, 22, 18, 63, 47, 56};
还有一个像

int newv[8]; 
我想从<代码>旧的<代码>的交替两端填充新的,直到满足某个条件,这样我就可以:

newv = [16, 56, 12, 47, 24, 63 ...]
假设我只想输入3个旧的数字(即:16、56、12)。 我尝试了以下for循环,但当然还不够

for(int i = 0; i < 3; i++) 
    newv[i] = oldv[i*(sizeof(oldv)-1)];
for(int i=0;i<3;i++)
newv[i]=oldv[i*(sizeof(oldv)-1)];
有什么帮助吗?

int\u old[10]={16,12,24,96,45,22,18,63,47,56};
int _old[10] = {16, 12, 24, 96, 45, 22, 18, 63, 47, 56};
int _new[8];

const int old_size = sizeof(_old)/sizeof(int);
const int new_size = sizeof(_new)/sizeof(int);

for (int i = 0; i < new_size; ++i)
{
    if (i % 2)
        _new[i] = _old[old_size - i / 2 - 1];
    else
        _new[i] = _old[i / 2];

    std::cout << _new[i] << " ";
}

std::cout << std::endl;
int_new[8]; const int old_size=sizeof(_old)/sizeof(int); const int new_size=sizeof(_new)/sizeof(int); 对于(int i=0;i
#包括
#包括
#包括
使用名称空间std;
int main(int,char**)
{
int oldv[]={16,12,24,96,45,22,18,63,47,56};
int-newv[8];
大小和数量=3;
尺寸=0;
尺寸=旧尺寸/旧尺寸*旧尺寸;
size_t newv_e=sizeof newv/sizeof*newv;
对于(尺寸i=0;
i!=min(我想要的数字,newv_e)和&oldv_b!=oldv_e;
++(一)
{
newv[i]=(i%2)?oldv[--oldv_e]:oldv[oldv_b++];
}
复制(newv,newv+min(我想要的数字,newv\e),
ostream_迭代器(cout,“”);
返回0;
}

<代码> <代码>新的<代码>是C++中的关键词。你是如何编译的?@ toBi303:我刚刚编辑了这个问题,希望能使它更清楚一些。@ MartinBonner,谢谢,我在这里写的时候是在编写代码。当然我不能用新的。我们叫NeXi。vect@NickyC逻辑看起来是错误的,但我不明白是什么错了使用sizeof数组。@static_cats如果(1%2==1)的情况下,您必须执行_new[i]=_old[sizeof(_old)/sizeof(_old[0])-(i+1)/2];@MayurK
sizeof
以字节为单位给出数组大小,而不是以元素数为单位。此外,它还需要额外注意确保指针不会衰减。@NickyC:哦!是的。它以字节为单位给出。但是sizeof(数组)/sizeof(数组[0])给出的数组长度正确吗?@MayurK是的,或者可能。如果
array
不是真正的数组,而是指向数组的指针,该怎么办?这里不是这种情况,但这种错误很常见。
#include <algorithm>
#include <iostream>
#include <iterator>

using namespace std;

int main(int, char**)
{
    int oldv[] = { 16, 12, 24, 96, 45, 22, 18, 63, 47, 56 };
    int newv[8];
    size_t numbers_i_want = 3;

    size_t oldv_b = 0;
    size_t oldv_e = sizeof oldv / sizeof *oldv;
    size_t newv_e = sizeof newv / sizeof *newv;

    for(size_t i = 0;
        i != min(numbers_i_want, newv_e) && oldv_b != oldv_e;
        ++i)
    {
        newv[i] = (i % 2) ? oldv[--oldv_e] : oldv[oldv_b++];
    }

    copy(newv, newv + min(numbers_i_want, newv_e),
        ostream_iterator<decltype(*newv)>(cout, " "));
    return 0;
}