在 c++ 中将 2x2 的矩阵添加到向量中
Add a matrix of 2x2 into a vector in c++
我正在尝试用 c++ 中的值矩阵填充向量。我对这个过程不是很自信(我对指针不太了解,我不知道我是否需要它),但是我正在尝试这个
int auxMat[gray.rows][gray.cols];
vector<int> collectionSum;
collectionSum.push_back(auxMat);
当我尝试编译时,我收到一个错误,上面写着
无效参数 '候选人是: 无效 push_back(const int &)
谁能告诉我是否可以做到,我该如何解决?
我读了一些关于擦除缓存,更改我的eclipse编译器,我的c ++版本的内容,但是我认为问题没有那么大。
不能将矩阵推回向量。您可以做的是为向量预分配内存(用于加快速度),然后使用 std::vector<>::assign
成员函数从矩阵"复制"到向量中:
vector<int> collectionSum(gray.rows * gray.cols); // reserve memory, faster
collectionSum.assign(*auxMat, *auxMat + gray.rows * gray.cols);
这应该很快。否则,您可以推回循环中的每个元素。
编辑
请参阅我可以将 2D 阵列视为连续 1D 阵列吗?,了解有关可能的未定义行为的一些技术细节(感谢@juanchopanza的评论)。我相信代码是安全的,因为矩阵的存储是连续的。
因为数组 auxMat 在内存中是连续的,所以你可以直接将其从内存复制到你的向量中。在这里,你告诉向量构造函数使用指针算法从 auxMat 的开头复制到它在内存中的结束:
std::vector<int> collectionSum(auxMat, auxMat + (gray.rows * gray.cols));
编辑:
抱歉,我将您的问题解读为一维数组(整数*)而不是二维(整数**)数组。老实说,我建议切换到 1D 阵列,因为它通常更快、更容易使用。根据您使用的是行优先顺序还是列优先顺序,您可以通过以下方式访问所需的元素:
elem = y * width + x; // for row-first order
elem = x * height + y; // for column-first order
例如:
// Create a 3x3 matrix but represent it continuously as a 1D array
const int A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
const unsigned width = 3;
const unsigned height = 3;
for (int y = 0; y < height; ++y)
{
for (int x = 0; x < width; ++x)
{
printf("%d ", A[y * width + x]);
}
printf("n");
}
相关文章:
- 添加存储在向量中的大整数的函数出现问题
- 不允许在向量中添加更多元素
- 如何将元素添加到向量的字符串位置
- 有没有办法向这个向量添加元素?
- 这种方式是否可以接受向向量添加unique_ptr?
- C++:添加新结构时,结构指针向量中的所有元素都会更新
- C++ 将子类的对象添加到父类的向量中
- 如何在提升间进程中构建具有给定计数的向量并向其添加元素
- 将不同类型的变量添加到向量中
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 使用 std::transform 将向量向量 (a) 添加到另一个向量向量 (b)
- 继承层次结构并将元素添加到向量
- 测试驱动开发 c++:如何将对象添加到向量中,将歌曲添加到播放列表并对其进行测试
- 如何将对象添加到类中的静态向量
- 对象如何将自身添加到对象类中的向量中?
- 为什么我们需要在优先级队列声明中添加一个向量作为参数?
- C++ 如何在向量中添加向量?vector.push_back( 向量<> )?
- 如何在CUDA内核中添加向量元素
- 向 NS2 添加向量;编译器错误
- 向向量添加向量