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
)。