size() 在 std::vector<vector> 的 2D 向量中是什么意思<double>?
What does size() mean in a 2D vector of std::vector<vector<double>>?
如果我有一个这样的二维矢量:
#include <vector>
typedef vector<vector<double>> Matrix;
Matrix A = {
{ 0, 2, 0, -2, 2.5},
{ 2, 0, 1, 0, 1.6},
{ 0, 1, 0, 1, 0},
{ -2, 0, 1, 0, 0},
{2.5, 1.6, 0, 0, 0}
};
如果A.size()
返回行,它是否将每个子向量计数为1行?为什么A[0].size()
表示列数?
这取决于您使用的库。如果您使用Boost uBLAS,您可以参考这里的文档。如果没有,您可以使用许多其他矩阵库。您可以在这里查看每个库的详细信息。
c++没有std::matrix
,但它支持多维数组以及向量中的向量。
例如,std::vector<std::vector>>
可以作为双矩阵,但是必须注意正确访问底层变量。从本质上讲,这个双层vector
只是一个向量内部的向量;因此,如果没有对operator[]
进行一些特殊的重载,那么双[x][y]
将无法工作。
对于vector内部的vector, A.size()
返回第1维的元素数量,A[0].size()
返回vector在第1维第0个索引处的元素数量。请注意,并不要求第一维向量内部的每个向量都具有均匀的长度。
创建一个可伸缩的x维矩阵是可能的,但它有点混乱,可能超出了这个问题的范围。
下面是一个如何在c++中创建"2d向量"的基本示例:
#include <iostream>
#include <string>
#include <vector>
int main() {
std::vector<std::vector<int>> matrix;
for (int i = 0; i < 10; ++i) {
matrix.push_back(std::vector<int>());
for (int j = 0; j < 10; ++j) {
matrix[i].push_back(i*10 + j);
}
}
for (int i = 0; i < 10; ++i) {
for (int j = 0; j < 10; ++j) {
std::cout << matrix[i].at(j) << std::endl;
}
}
return 0;
}
3d-matrix的颜色:http://coliru.stacked-crooked.com/a/b949266621fb45fb
首先,您应该知道如何初始化矩阵。让我们将浮点数插入到矩阵中,如下所示。
Matrix A;
vector<double> a1, a2, a3, a4;
a1.push_back(0);
a1.push_back(2);
a1.push_back(0);
a1.push_back(-2);
a1.push_back(2.5);
a2.push_back(2);
a2.push_back(0);
a2.push_back(1);
a2.push_back(0);
a2.push_back(1.6);
a3.push_back(-2);
a3.push_back(0);
a3.push_back(1);
a3.push_back(0);
a3.push_back(0);
a4.push_back(2.5);
a4.push_back(1.6);
a4.push_back(0);
a4.push_back(0);
a4.push_back(0);
A.push_back(a1);
A.push_back(a2);
A.push_back(a3);
A.push_back(a4);
现在,4个向量(a1, a2, a3, a4)已经被插入到矩阵中。所以A.size()是4。a1.size()等于5。A[0] = a1,所以A[0].size() = 5
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中用vector填充一个简单的动态数组
- vector.resize()中的分配错误
- 使用std::vector的OpenCL矩阵乘法
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 在某些循环内使用vector.push_back时出现分段错误
- 当vector是tje全局变量时,c++中vector的内存管理
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- std::vector的包装器,使数组的结构看起来像结构的数组
- 呼叫运营商<<临时
- 为什么(-1)%vector::size()总是返回0
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 在C++中将类(带有Vector成员)保存为二进制文件
- 编译器如何区分std::vector的构造函数
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- std::vector::reserve(未知m),我知道m<<;N(通常)并且知道N
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- C++重载<<具有typedef'd std::vector
- std::映射<>或std::vector<>在处理大型标志集时