STL 教程:如何在示例程序中使用 C++ Vector

举报
Tiamo_T 发表于 2021/09/29 14:03:44 2021/09/29
【摘要】 Vector 是 STL(标准模板库)的重要组成部分。在非常高的层次上,STL 库有很多经常使用的容器,而可以应用于这些容器的方法很少。基本上,STL 有几个现成的通用类,您可以在 C++ 编程中使用它们。在我们讨论 Vector 之前,让我们从一个数组开始。通常,您将初始化一个数组,如下所示。在这种情况下,您在内存中为不超过 10 个整数保留空间。int array[10];如果数组中需要...

Vector 是 STL(标准模板库)的重要组成部分。

在非常高的层次上,STL 库有很多经常使用的容器,而可以应用于这些容器的方法很少。基本上,STL 有几个现成的通用类,您可以在 C++ 编程中使用它们。

在我们讨论 Vector 之前,让我们从一个数组开始。

通常,您将初始化一个数组,如下所示。在这种情况下,您在内存中为不超过 10 个整数保留空间。

int array[10];

如果数组中需要 11 个 int 怎么办?

然后定义维度,如 DIM 10,这是一个宏,如果您需要更改该维度,则更改数字。

在这种情况下,您需要重新编译程序,这在所有情况下都不实用。

您可以对数组进行硬编码,将维度排除在外,让 C++ 计算数组的维度。或者您可以使用:calooc、free、malloc、realloc 或 sbrk。

在 C++ 中,这些函数已被称为过时,您可以使用 new 和 delete 代替上述函数进行动态分配。

C++ 向量示例代码

下面的 C++ 代码示例展示了我们如何使用 Vector。

#include <iostream>
#include <vector>

using namespace std;

int
main(void)
{

//Space for vector of int, called iVector
vector <int> iVektor;

//we will add the elements at the end of vector
do
{

//space for next element of the vector
cout<<"Next Element->"; int iElement; cin>>iElement;

//to remove the element from the back use pop_back
iVektor.push_back(iElement);

cout<<"Size of the vector is ="<<iVektor.size()<<endl
    <<"Capacity of the vector="<<iVektor.capacity()<<endl;

cout<<"More elements yes(y)/no(n)->";
char cRespond; cin>>cRespond;

if((cRespond == 'y')||(cRespond=='Y')) continue;

break;

} while(true);

//display elements from begin to end
for(vector<int>::iterator i=iVektor.begin();
    i != iVektor.end();
    cout<<*i++<<endl); cout<<endl<<endl;

//display elements from end to begin
for(vector<int>::reverse_iterator r=iVektor.rbegin();
    r != iVektor.rend();
    cout<<*r++<<endl); cout<<endl<<endl;

cout<<"You wish to see the element->";int iIndex; cin>>iIndex;

//first method to dispaly n-th element of a vector
cout<<"At("<<iIndex<<")="
    <<iVektor.at(iIndex)<<endl
    <<"or like this=";

//one more approach to display one of vector elements
vector<int>::iterator p=iVektor.begin()+iIndex;cout<<*p<<endl;

int iRespond; cin>>iRespond;

return EXIT_SUCCESS;

}

在 STL 中,有人创建了具有多种方法的类,您可以直接使用它们,并从几个从事 STL 的程序员的积累工作中受益。

例如,这些类用 #include <vector> 调用。

C++ 中还有其他容器,它们可以应用于适当的情况。

声明这些类,如下所示:

template <typename T> class vector

现在,如果您知道C++ 模板的工作原理,您可以得出结论,有许多属于用户使用类型的元素。

您可能感兴趣的一些事情是在方法中实现的:大小、容量、调整大小等。这些方法非常容易理解。

如果某个任务经常使用,他们通常会在矢量库中添加该方法。

一件非常重要的事情是迭代器,您可以像使用指针一样使用它们,但您不需要了解它们的实现。在某些情况下,了解向量是如何实现的可能很有用,因为您可以估计算法的速度。

要获得向量的开头,您可以使用 begin,但对于结尾有方法 end。如果你想向后使用它,你有:rbegin 和 rend。

如果您想在某个位置获取元素,您应该拥有可以以这种方式使用的方法:

iVector.at[positon];

向量是类似数组的数据结构,从速度的角度来看是好的,如果我们需要访问任意元素,如果我们需要在最后添加元素,但如果需要添加元素,它们就不是很好在开头或中间。

这为其他容器留下了空间,例如:堆栈、队列、列表、映射等。但这是一个新讨论的地方,在您所处的情况下使用哪个容器。对 STL 向量的介绍应该是一个很好的开始进一步研究并提高您在该领域的技能。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。