C++中关于属性向量的查询
Posted
技术标签:
【中文标题】C++中关于属性向量的查询【英文标题】:Query about Properties Vectors in C++ 【发布时间】:2011-10-02 08:40:49 【问题描述】:我是一个初学者,刚刚接触到 C++ 中向量的概念。我有几个问题 1. C++中有二维向量的概念吗?如果是,那么我如何声明对应于二维矩阵 a[n][m]?这里,n 和 m 是变量。 2. 向量如何作为参数传递给函数?默认情况下,它们是按引用传递还是按值传递? 3. C++ 中向量相对于数组有什么性能优势?
【问题讨论】:
【参考方案1】:1 - 本身并没有真正的维度概念。但是您可以创建“嵌套”类型。例如:
std::vector <int> intVec;
std::vector < std::vector <int> > doubleIntVec;
在这里,intVec
可以与一维向量进行比较,doubleIntVec
可以与二维向量进行比较,等等。类型不必相同,例如可以std::vector < std::vector <char> > doubleIntVec
,这就是为什么“维度”在这里不是正确的术语。
2 - 与任何其他类型一样,向量没有特定的处理方式。
3 - 是的,例如,如果您需要调整它们的大小,但您可以实现数组以类似的行为。除此之外的好处是标准化、内置的内存管理、附加方法以及可以在向量上运行的各种 STL 算法(作为标准容器)。
【讨论】:
【参考方案2】:C++ 中没有二维向量,要创建矩阵,可以使用向量的向量。
using namespace std;
int m, n;
// ...
vector<vector<int> > v(n);
for (int y = 0; y < n; y++)
v[n].resize(m);
// ...
不过,计算库不会以这种方式实现它们。
要通过引用函数来传递向量,请使用: 无效函数(向量 & v); 省略 & 将导致在函数调用期间复制向量。
向量具有与 C 数组相同的性能,但更实用。 无需手动管理内存,向量大小始终可访问。 您还可以自动复制并保证值的连续性(原始数据可以通过 vector::data() 访问
【讨论】:
难道没有更好的方法来声明大小为 m*n 的向量吗?? 一个大小为 m*n 的向量就是vector<T> v(m*n)
,在这种情况下,您需要使用 m*y+x
计算 (x,y) 单元格偏移量,而嵌套向量允许使用v[y][x] 语法...【参考方案3】:
C++ 中的向量只是一个序列容器。所以,可以用它来保存一个二维数组。
-
使用
std::vector <std::vector<int>>
这取决于目的。
性能不佳,但与数组不同,std::vector 是可增长的。
【讨论】:
以上是关于C++中关于属性向量的查询的主要内容,如果未能解决你的问题,请参考以下文章