C++中的数组拆分
Array Split in C++
我正在尝试拆分一个数组,我就是这样做的:
int arr1[] = {1, 2, 3, 4, 5};
int *arr2 = arr1 + 1;
现在我需要循环执行此操作。在每次迭代中,我都试图根据一个条件将数组的大小减少1个元素或2个元素。由于明显的原因,我不能声明int arr2[some_variable]
。
但我希望在循环的每次迭代中都创建一个新数组,其大小比其父数组小1。我不知道我怎样才能做到这一点。有人能帮忙吗?
在Java中,有一个函数可以做到这一点:int newArr[] = Arrays.copyOfRange(arr, 1, arr.length);
我在C++中想要类似的东西。
使用C++标准库中的std::vector<int>
:
#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);
}
如果真的真的不能使用vector
(为什么,说真的?),那么只使用memcpy
。
int arr[] = { 1, 2, 3, 4, 5 };
int cp[3];
memcpy(cp, arr + 1, sizeof(cp));
我不确定为什么每次都要有一个新容器,但您可以使用标准容器,如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::next
是因为它适用于更多的场景。所有这些都是从两个迭代器创建一个向量:尽可能远地超过开始,和结束(一个超过,因为它是独占的)。
尽管C++11很好,但它并不总是现实。在这种情况下,这应该起作用:
int arr1temp[] = {1, 2, 3, 4, 5};
std::vector<int> arr1(arr1temp, arr1temp + sizeof(arr1temp)/sizeof(arr1temp[0]));
int index = 0;
/*loop header*/ {
//make sure arr1.size() is at least 1
std::vector<int>::iterator start = arr1.begin();
std::advance(start, ++index);
std::vector<int> arr2(start, arr1.end());
}
/为什么/您认为需要复制数组?指针和数组在某种程度上是可互换的,所以您所需要做的就是跟踪大小并修改它。
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);
}
您没有复制数据,就"doSomethingWithMyArray"而言,该数组和我们所说的一样大。
相关文章:
- 如何拆分文件中.txt字母并使用c ++使用数组进行扑克?
- 将字符串拆分为标记,并将标记拆分为两个单独的数组
- 给定一个大小为 N 的数组 S,检查是否可以将序列拆分为两个序列
- 拆分字符数组并存储为向量
- 通过拆分字符数组来创建字符串
- 在C++中用字符串数组拆分声明和赋值
- 如何拆分整数并将所有内容添加到数组中?
- 将字符拆分为字符数组
- C++字符串数组在 20 字节后拆分
- 按空格拆分字符串并将列输出到不同的数组中
- 如何在 c++ 中将字符串拆分为字符串 2d 数组数组
- 使用C 从定界线拆分字符串中提取整数数组
- C++将大型数组拆分/分区为较小的数组
- 拆分数组的更轻松的方法是什么?
- 如何调试此代码以按空格将数组拆分
- 在没有OPENCV的C 中,RGB数组的拆分通道
- 在 C++ 中拆分数组的可能性
- 将一个std::数组拆分为一个较小大小的std::array元组
- 练习:将数组值拆分为正数组和负数组
- c++中拆分数组字符串