【问题标题】:Query about Properties Vectors in C++C++中关于属性向量的查询
【发布时间】:2011-10-02 08:40:49
【问题描述】:

我是一个初学者,刚刚接触到 C++ 中向量的概念。我有几个问题
1. C++中有二维向量的概念吗?如果是,那么我如何声明对应于二维矩阵 a[n][m]?这里,n 和 m 是变量。
2. 向量如何作为参数传递给函数?默认情况下,它们是按引用传递还是按值传递?
3. C++ 中向量相对于数组有什么性能优势?

【问题讨论】:

    标签: c++ function vector


    【解决方案1】:

    1 - 本身并没有真正的维度概念。但是您可以创建“嵌套”类型。例如:

    std::vector <int> intVec;
    std::vector < std::vector <int> > doubleIntVec;
    

    在这里,intVec 可以与一维向量进行比较,doubleIntVec 可以与二维向量进行比较,等等。类型不必相同,例如可以std::vector &lt; std::vector &lt;char&gt; &gt; 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&lt;T&gt; v(m*n),在这种情况下,您需要使用 m*y+x 计算 (x,y) 单元格偏移量,而嵌套向量允许使用v[y][x] 语法...
      【解决方案3】:

      C++ 中的向量只是一个序列容器。所以,可以用它来保存一个二维数组。

      1. 使用std::vector &lt;std::vector&lt;int&gt;&gt;
      2. 这取决于目的。
      3. 性能不佳,但与数组不同,std::vector 是可增长的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-31
        • 1970-01-01
        • 1970-01-01
        • 2020-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多