C++ 在C+中拆分数组+;

C++ 在C+中拆分数组+;,c++,arrays,C++,Arrays,我正在尝试拆分阵列,我就是这样做的: int arr1[] = {1, 2, 3, 4, 5}; int *arr2 = arr1 + 1; 现在我需要在一个循环中完成这项工作。在每次迭代中,我都试图根据条件将数组的大小减少1个或2个元素。由于明显的原因,我不能声明intarr2[某些变量] 但我希望在循环的每次迭代中创建一个新数组,其大小比其父数组小1。我不知道如何才能做到这一点。有人能帮忙吗 在Java中,有一个函数可以做到这一点:int newArr[]=Arrays.copyOfRan

我正在尝试拆分阵列,我就是这样做的:

int arr1[] = {1, 2, 3, 4, 5};
int *arr2 = arr1 + 1;
现在我需要在一个循环中完成这项工作。在每次迭代中,我都试图根据条件将数组的大小减少1个或2个元素。由于明显的原因,我不能声明
intarr2[某些变量]

但我希望在循环的每次迭代中创建一个新数组,其大小比其父数组小1。我不知道如何才能做到这一点。有人能帮忙吗

在Java中,有一个函数可以做到这一点:
int newArr[]=Arrays.copyOfRange(arr,1,arr.length)我希望在C++中有类似的东西。

使用C++标准库:

#include <string>
#include <iostream>
#include <vector>

void dump(std::vector<int> &v)
{
    for (std::vector<int>::iterator it = v.begin(); it != v.end(); it++)
        std::cout << *it << " ";
}

int main()
{
    int a[] = { 1, 2, 3, 4, 5 };
    std::vector<int> v(a, a + 5);
    std::vector<int> v2(v.begin() + 1, v.begin() + 4);

    dump(v);
    std::cout << std::endl;
    dump(v2);
}

从C++标准库使用:

#include <string>
#include <iostream>
#include <vector>

void dump(std::vector<int> &v)
{
    for (std::vector<int>::iterator it = v.begin(); it != v.end(); it++)
        std::cout << *it << " ";
}

int main()
{
    int a[] = { 1, 2, 3, 4, 5 };
    std::vector<int> v(a, a + 5);
    std::vector<int> v2(v.begin() + 1, v.begin() + 4);

    dump(v);
    std::cout << std::endl;
    dump(v2);
}

我不清楚为什么每次都想要一个新的,但可以使用标准容器,如
std::vector

std::vector<int> arr1{1, 2, 3, 4, 5}; //std::iota is another option
int index{};
/*loop header*/ {
    //make sure arr1.size() is at least 1
    std::vector<int> arr2(std::next(std::begin(arr1), ++index), std::end(arr1));
}

我不清楚为什么每次都想要一个新的,但可以使用标准容器,如
std::vector

std::vector<int> arr1{1, 2, 3, 4, 5}; //std::iota is another option
int index{};
/*loop header*/ {
    //make sure arr1.size() is at least 1
    std::vector<int> arr2(std::next(std::begin(arr1), ++index), std::end(arr1));
}

/为什么/您认为需要制作阵列的副本?指针和数组都是,所以您所需要做的就是跟踪大小并修改它

void doSomethingWithArray(int* array, size_t arraySize) {
    ....
}

const size_t arraySize = 5;
int arry1[arraySize] = { 1, 2, 3, 4, 5 };
int* array = arr1;
int* arrayEnd = arr1 + arraySize;
for (int i = 0; i < 10; ++i) {
  if ((*array) & 1 == 1) {
    array += 1;
  } else {
    array += 3;
  }
  if(array >= arrayEnd)
      break;
  size_t howBigIsMySlice = arrayEnd - array;
  if(howBigIsMySlice > && (rand() % 1) == 0)
    howBigIsMySlice -= 1;
  doSomethingWithArray(array, howBigIsMySlice);
}
void doSomethingWithArray(int*数组,大小\u t数组大小){
....
}
const size\u t arraySize=5;
int arry1[arraySize]={1,2,3,4,5};
int*array=arr1;
int*arrayEnd=arr1+arraySize;
对于(int i=0;i<10;++i){
if((*数组)&1==1){
数组+=1;
}否则{
数组+=3;
}
如果(数组>=arrayEnd)
打破
大小\u t howBigIsMySlice=arrayEnd-数组;
如果(howBigIsMySlice>&(rand()%1)=0)
howBigIsMySlice-=1;
doSomethingWithArray(数组,howBigIsMySlice);
}

您没有复制数据,就“doSomethingWithMyArray”而言,该阵列与我们所说的一样大。

/为什么/您认为需要复制该阵列?指针和数组都是,所以您所需要做的就是跟踪大小并修改它

void doSomethingWithArray(int* array, size_t arraySize) {
    ....
}

const size_t arraySize = 5;
int arry1[arraySize] = { 1, 2, 3, 4, 5 };
int* array = arr1;
int* arrayEnd = arr1 + arraySize;
for (int i = 0; i < 10; ++i) {
  if ((*array) & 1 == 1) {
    array += 1;
  } else {
    array += 3;
  }
  if(array >= arrayEnd)
      break;
  size_t howBigIsMySlice = arrayEnd - array;
  if(howBigIsMySlice > && (rand() % 1) == 0)
    howBigIsMySlice -= 1;
  doSomethingWithArray(array, howBigIsMySlice);
}
void doSomethingWithArray(int*数组,大小\u t数组大小){
....
}
const size\u t arraySize=5;
int arry1[arraySize]={1,2,3,4,5};
int*array=arr1;
int*arrayEnd=arr1+arraySize;
对于(int i=0;i<10;++i){
if((*数组)&1==1){
数组+=1;
}否则{
数组+=3;
}
如果(数组>=arrayEnd)
打破
大小\u t howBigIsMySlice=arrayEnd-数组;
如果(howBigIsMySlice>&(rand()%1)=0)
howBigIsMySlice-=1;
doSomethingWithArray(数组,howBigIsMySlice);
}

您没有复制数据,就“doSomethingWithMyArray”而言,数组与我们所说的一样大。

嗨,克里斯-是的,如果使用向量,生活会更轻松。但问题是我使用的是遗留系统。如果我在一个地方更改类型,我可能不得不在许多其他地方更改。这就是全部问题。@Rahul没有借口。使用向量。@Rahul,这应该不是一项太艰巨的任务。向量在许多方面与内置数组的语法几乎完全相同,最终您将获得向量提供的好处。我希望这不是一个紧密的循环。在每次迭代中进行新的动态分配可能会有点不利。@jrok,我同意,它看起来非常不必要,好像有另一种方法可以做到这一点,同样简单,但不会有太多浪费。嗨,克里斯-是的,如果使用向量,生活会更轻松。但问题是我使用的是遗留系统。如果我在一个地方更改类型,我可能不得不在许多其他地方更改。这就是全部问题。@Rahul没有借口。使用向量。@Rahul,这应该不是一项太艰巨的任务。向量在许多方面与内置数组的语法几乎完全相同,最终您将获得向量提供的好处。我希望这不是一个紧密的循环。在每次迭代中进行新的动态分配可能会有点不利。@jrok,我同意,它看起来非常不必要,好像有另一种方法可以做到这一点,同样简单,但不会有太多浪费。非常感谢您。我想这应该能解决我的问题。非常感谢你。我认为这应该解决我的问题。我不知道为什么会有反对票。这是我的第一篇文章,我在发帖前做了充分的研究。伙计们,我是个业余程序员。当人们自己学习时,他们肯定会有一些问题!!不知道为什么会有反对票。这是我的第一篇文章,我在发帖前做了充分的研究。伙计们,我是个业余程序员。当人们自己学习时,他们肯定会有一些问题!!指针和数组是可交换的。虽然代码看起来很好(没有测试过),但我想补充一下,在现代C++中,你不应该再使用原始数组和指针来使用两个ROK。有更简单、更安全的方法来处理事情(即
std::vector
和智能指针,或者,如果需要
std::array
),指针和数组是可交换的。虽然代码看起来很好(没有测试过),但我想补充一下,在现代C++中,你不应该再使用原始数组和指针来使用两个ROK。有更简单更安全的方法来处理事情(即
std::vector
和智能指针,或者,如果需要
std::array
)。