视觉 将 1D 数组转换为 2D 矢量 c++
visual Convert a 1D Array to 2D Vector c++
有人可以帮我编写一个将 ID 数组转换为 2D 向量的逻辑吗?
类似的东西
int array[] = {1, 4, 5, 7, 9, 3}; // dynamic array
vector <vector int> ex;
我现在如何将值放在数组中的 ex 中,以便它形成 2 个向量,每个向量 3 个值?
我搜索了没有用的帮助,并亲自尝试了如下:
for(int i=0; i<2; i++)
{
rowTemp_ex.assign(array, array+3));
ex.push_back(rowTemp_ex);
rowTemp_ex.erase(rowTemp_ex.begin() , rowTemp_ex.end());
}
首先,计算将有多少行向量。如果每个元素都有三个元素,则总数是数组的大小除以 3。
template <typename T, std::size_t N>
std::size_t size(T(&)[N]) { return N; }
int number_of_rows = size(array) / 3;
现在创建一个具有该数量的行向量,每个行向量有三个元素:
std::vector<std::vector<int> > v(number_of_rows, std::vector<int>(3));
然后遍历原始数组并使用整数除法和余数运算填充结果的每个单元格:
for(int i = 0; i < size(array); ++i) {
v[i / 3][i % 3] = array[i];
}
你走在正确的轨道上,但在 for 循环中犯了一个错误:
rowTemp_ex.assign(array, array+3));
这将在每次迭代时分配数组的同一部分。您需要将行 (3) 的大小乘以 i:
rowTemp_ex.assign(array + i * 3, array + (i * 3) + 3));
i = 0: 0*3 0*3+3
i = 1: 1*3 1*3 + 3
array: [ 0 ][ 1 ][ 2 ][ 3 ][ 4 ][ 5 ] [one past the end]
对vector::erase
的调用是多余的,vector::assign
下一次迭代中无论如何都会丢弃以前的内容。
以下是一些更通用的东西,也可以处理可能的奇数元素(未经测试):
const size_t arr_size = N;
const size_t n_cols = M;
const size_t n_rows = arr_size / n_cols;
const size_t n_odd = arr_size % n_cols;
int arr[arr_size] = { .... };
int* begin = arr;
int* end = arr + (n_rows * n_cols);
while( begin != end ) {
ex.push_back(std::vector<int>(begin, begin + n_cols));
begin += n_cols;
}
if (n_odd)
ex.push_back(std::vector<int>(begin, begin + n_odd));
假设您始终需要三个大小为 2 的向量,并且 2D 向量在 C 数组中成对对齐,请执行以下操作:
int array[] = {1, 4, 5, 7, 9, 3}; // dynamic array
vector<vector<int> > ex;
for(int i = 0; i < 3; ++i)
{
vector<int> tmp;
tmp.push_back(array[2*i]);
tmp.push_back(array[2*i+1]);
ex.push_back(tmp);
}
相关文章:
- 我是 C++ 的初学者,我想知道如何在 2D 矢量中获取重复值
- 如何在 c++ 中格式化和访问 2D 矢量数组中的数据
- 读取字符串文本输入以创建 2D 矢量
- 识别 2D 矢量C++中的位置
- Cython:无法分配给 2D 矢量
- 按列随机播放 2D 矢量
- 初始化空的 2D 矢量?
- 如何在 2d 矢量 c++ 中复制元素并将其放在原始元素旁边
- 如何访问具有地图的2D矢量?
- 通过功能进行2D矢量输入和显示
- 在C++中将对象添加到 2D 矢量
- 太空入侵者 – 2D 矢量运动算法
- 从 2 个 1D 矢量创建 2D 矢量
- 如何仅使用其中一个维度在 2D 矢量中插入值?
- 在 2D 矢量中获取多个输入时出现问题
- 2D 矢量循环 C++
- C++ 2D 矢量到 2D pybind11 数组
- 在 2D 矢量数组中的特定标头下添加数据
- 在C++中使用 2D 矢量时出现明显的内存泄漏
- 从文本文件中读取一行并将其存储在 C++ 中的 2D 矢量中