在此之前,我一直在学习编码学校(矢量,字符,二维数组,没什么太花哨的代码),并且在CodeBlocks中用C ++编写代码。一个月前,我开始从C ++ Primer学习。我现在处于矢量类型,我对此感到困惑。当我以前使用向量时,我从未包含任何其他库,并且我将向量声明为:
#include <iostream>
int main ()
{
int v[10];
return 0;
}
现在使用vector
库以更复杂的方式定义向量,在定义中提及元素类型等等。
我只是想知道在我认为相当容易的主题方面有多大的差异。这些载体究竟是什么问题?
答案 0 :(得分:13)
你感到困惑,因为矢量的数学概念可能意味着数据集合&#34;这就是你所教的int v[10]
。 C ++(以及大多数其他语言)中的实际名称是&#34;数组&#34;不是矢量。
C ++ Primer中引用的库有一个名为&#34; vector&#34;这是一个数组的实现。它们很相似,但不一样。
我希望能够清除这一点。您可能感到困惑,因为您被告知int v[10]
是一个向量,但它不是真的&#34;在C ++中。它是一个阵列。使用该术语来引用它。如果你把它称为矢量,你会混淆他人和你自己。
答案 1 :(得分:12)
这里的混乱来自几个名称冲突&#34;在C ++及其标准库中。
v
的类型为&#34;十个整数的数组&#34;。std::vector
的模板类。这就是你的书所称的#34;向量&#34;,这是正确的。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();
这个答案只是一个模糊的介绍,应该可以帮助你清除基础知识。您可以参考上面的链接获取更多信息。