在此之前,我一直在学习代码在学校(矢量,字符,二维数组,没什么太花哨的),并在CodeBlocks中用C++编写代码.一个月前,我开始从C++ Primer学习.我现在处于矢量类型,我对此感到困惑.当我以前使用向量时,我从未包含任何其他库,我声明了这样的向量:
#include <iostream>
int main ()
{
int v[10];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在,矢量以更复杂的方式定义,使用vector库,提及定义中的元素类型等等.
我只是想知道如何在主题上有这么大的差异我认为相当容易.这些载体究竟是什么问题?
Kev*_*son 13
你会感到困惑,因为矢量的数学概念可能意味着"数据集合",这就是你所教授的内容int v[10].C++(以及大多数其他语言)中的实际名称是"数组"而不是向量.
C++ Primer中引用的库有一个名为"vector"的类,它是一个数组的实现.它们相似,但不一样.
我希望能够清除这一点.你可能很困惑,因为你被教导的int v[10]是一个向量,但它在C++中"不是真的".这是一个阵列.使用该术语来引用它.如果你把它称为矢量,你会混淆别人和你自己.
das*_*ght 12
这里的混淆来自于C++及其标准库中的几个"名称冲突".
v程序中的变量是"十个整数数组"类型.std::vector.这就是你的书所谓的"向量",这是正确的.std::array表示固定大小数组的模板类.这会与内置的C++数组产生混淆.为避免混淆,请将int v[10]"内置数组" std::array<int, 10> v称为"数组容器",并std::vector<int> v称为"向量".
因为那些不是真的,真的是矢量.
在C++中,当人们说"vector"时,他们主要是指一个STL容器std::vector.它本质上是一个动态阵列,使用方便,功能强大.
你写的是一个固定长度的简单数组.它的功能非常有限.如果您有一个定义为包含10个元素的数组,则以后不能更改它以便它可以容纳11个元素.它的大小是静态的.
要使用std::vector容器,请首先包含其对应的标头:
#include <vector>
using std::vector;
Run Code Online (Sandbox Code Playgroud)
它是一个模板化的类,因此在定义实例时必须建议一个类型:
vector<int> v;
Run Code Online (Sandbox Code Playgroud)
然后,您可以对其执行各种操作,因为它是一种动态数组:
v.resize(10); // Note its size is 0 at definition
v[9] = 123;
v[7] = 456;
Run Code Online (Sandbox Code Playgroud)
请注意,您无法像这样调整数组大小.虽然动态分配是另一种选择,但你很快就会搞砸它.
您还可以在处理数组时直接复制矢量而无需编写循环:
vector<int> v2 = v;
Run Code Online (Sandbox Code Playgroud)
也可以从函数返回向量,而数组不能:
vector<int> getVector(void){
vector<int> ret = {1, 2, 3, 4};
return ret;
}
vector<int> v = getVector();
Run Code Online (Sandbox Code Playgroud)
这个答案只是一个模糊的介绍,应该可以帮助你清除基础知识.您可以参考上面的链接获取更多信息.