对矢量感到困惑

时间:2018-01-05 14:34:46

标签: c++ c++11 vector

在此之前,我一直在学习编码学校(矢量,字符,二维数组,没什么太花哨的代码),并且在CodeBlocks中用C ++编写代码。一个月前,我开始从C ++ Primer学习。我现在处于矢量类型,我对此感到困惑。当我以前使用向量时,我从未包含任何其他库,并且我将向量声明为:

#include <iostream>

int main ()
{
    int v[10];
    return 0;
}

现在使用vector库以更复杂的方式定义向量,在定义中提及元素类型等等。

我只是想知道在我认为相当容易的主题方面有多大的差异。这些载体究竟是什么问题?

3 个答案:

答案 0 :(得分:13)

你感到困惑,因为矢量的数学概念可能意味着数据集合&#34;这就是你所教的int v[10]。 C ++(以及大多数其他语言)中的实际名称是&#34;数组&#34;不是矢量。

C ++ Primer中引用的库有一个名为&#34; vector&#34;这是一个数组的实现。它们很相似,但不一样。

我希望能够清除这一点。您可能感到困惑,因为您被告知int v[10]是一个向量,但它不是真的&#34;在C ++中。它是一个阵列。使用该术语来引用它。如果你把它称为矢量,你会混淆他人和你自己。

答案 1 :(得分:12)

这里的混乱来自几个名称冲突&#34;在C ++及其标准库中。

  • C ++具有名为 arrays 的内置对象。程序中的变量v的类型为&#34;十个整数的数组&#34;。
  • 其他编程语言将数组称为 vectors ,提示熟悉多种编程语言的教师调用C ++数组&#34;向量。&#34;这就是你的课程讲师所做的,即使它与C ++类型的命名法不一致。
  • C ++标准库定义了一个名为std::vector的模板类。这就是你的书所称的#34;向量&#34;,这是正确的。
  • C ++标准库定义了另一个名为std::array的模板类来表示固定大小的数组。这会与内置的C ++数组产生混淆。

为避免混淆,请参考int v[10] as&#34;内置数组,&#34; std::array<int, 10> v as&#34;数组容器,&#34;和std::vector<int> v as&#34; vector。&#34;

答案 2 :(得分:7)

因为那些不是真正的,真正的载体。

在C ++中,当人们说&#34; vector&#34;时,他们主要指的是STL容器std::vector。它本质上是一个动态阵列,使用方便且功能强大。

你所写的是一个固定长度的简单数组。它的功能非常有限。如果您有一个定义为容纳10个元素的数组,则以后不能更改它,以便它可以容纳11个元素。它的大小是静态的。

要使用std::vector容器,请先包含相应的标头:

#include <vector>
using std::vector;

它是一个模板化的类,因此您在定义实例时必须建议类型:

vector<int> v;

然后,您可以对其进行各种操作,因为它是一种动态数组:

v.resize(10); // Note its size is 0 at definition
v[9] = 123;
v[7] = 456;

请注意,您无法像这样调整数组大小。虽然动态分配是一种替代方案,但您很快就会陷入困境。

您还可以在处理数组时直接复制矢量而无需编写循环:

vector<int> v2 = v;

也可以从函数返回向量,而数组可以是

vector<int> getVector(void){
    vector<int> ret = {1, 2, 3, 4};
    return ret;
}

vector<int> v = getVector();

这个答案只是一个模糊的介绍,应该可以帮助你清除基础知识。您可以参考上面的链接获取更多信息。