【易客吧】_全网激活码总代_激活码商城

您现在的位置是:首页 > 热门资讯 > 正文

热门资讯

深入解析C++ vector 删除操作:从基础到高级 (深入解析css)

用户投稿2024-04-07热门资讯21

在C++中,vector是一个动态数组,它可以自动增长和缩小以容纳其元素。vector提供了许多有用的操作,其中包括删除元素的操作。本文将深入解析C++ vector中的删除操作,从基础知识到高级用法。

基础知识

最基本的删除操作是 erase() 函数,它从vector中删除一个或多个元素。 erase() 函数有两种重载形式:

  • erase(iterator it) :从vector中删除由迭代器it指向的元素。
  • erase(iterator begin, iterator end) :从vector中删除从begin到end(不包括end)的元素。

例如,以下代码使用 erase() 函数从vector中删除index为0的元素:

    include int main() {std::vector v = {1, 2, 3, 4, 5};v.erase(v.begin());return 0;}

执行此代码后,vector将变为{2, 3, 4, 5}。

高级用法

除了基本的 erase() 函数外,vector还提供了其他一些删除操作,这些操作允许在特定情况下更有效地删除元素。

clear() 函数

clear() 函数从vector中删除所有元素,而不影响其容量。与 erase() 函数不同, clear() 函数不会重新分配vector的底层存储空间。因此, clear() 函数在删除vector中的所有元素时比 erase() 函数更有效率。

例如,以下代码使用 clear() 函数从vector中删除所有元素:

    include int main() {std::vector v = {1, 2, 3, 4, 5};v.clear();return 0;}

执行此代码后,vector将变为空vector。

pop_back() 函数

pop_back() 函数从vector中删除最后一个元素。与 erase() 函数不同, pop_back() 函数不会重新分配vector的底层存储空间。因此, pop_back() 函数在删除vector的最后一个元素时比 erase() 函数更有效率。

例如,以下代码使用 pop_back() 函数从vector中删除最后一个元素:

    include int main() {std::vector v = {1, 2, 3, 4, 5};v.pop_back();return 0;}
深入解析C++ vector 删除操作:从基础到高级 (深入解析css) 第1张

执行此代码后,vector将变为{1, 2, 3, 4}。

resize() 函数

resize() 函数改变vector的size。如果new_size小于vector的当前size,则 resize() 函数会从vector中删除超出new_size的部分元素。与 erase() 函数不同, resize() 函数不会重新分配vector的底层存储空间。因此,当减少vector的size时, resize() 函数比 erase() 函数更有效率。

例如,以下代码使用 resize() 函数将vector的size减少到3:

    include int main() {std::vector v = {1, 2, 3, 4, 5};v.resize(3);return 0;}

执行此代码后,vector将变为{1, 2, 3}。

效率注意事项

在使用vector的删除操作时,需要注意以下效率注意事项:

  • erase() 函数的复杂度为O(n),其中n是需要删除的元素的数量。这是因为 erase() 函数需要移动vector中所有剩余的元素以填补被删除元素留下的空隙。
  • clear() 函数的复杂度为O(1)。这是因为 clear() 函数不会重新分配vector的底层存储空间。
  • pop_back() 函数的复杂度为O(1)。这是因为 pop_back() 函数只需要删除vector的最后一个元素,而不需要移动vector中的任何其他元素。
  • resize() 函数的复杂度为O(n),其中n是vector的当前size和new_size之间的差值。这是因为 resize() 函数需要移动vector中所有剩余的元素以适应新的size。

根据需要删除元素的数量和vector的当前size,选择最合适的删除操作非常重要。对于删除大量元素, clear() 函数通常是最佳选择。对于删除vector的最后一个元素, pop_back() 函数是最佳选择。对于将vector的size减小到较小的值, resize() 函数通常是最佳选择。

结论

C++ vector提供了多种删除操作,以满足各种需求。了解这些操作的基础知识和高级用法对于高效地管理vector中的数据非常重要。通过正确选择删除操作,可以优化vector的性能并避免不必要的开销。


有了C和C++基础要学Java的话看那些书比较合适呢?

java的内容比C简单多了,去除了很多C/C++中容易出错的地方,如指针等,减轻学习负担,所以有C的基础能很快就能学会(不过C中没有类的概念,C++中有,有C++的基础更容易上手点)。 java的核心在于类,所有的东西都封装在类中,包括main函数,因此建议把类学好。 介绍几本java的书:java语言程序设计(基础篇、进阶篇)。 java的书没什么太经典的,如果要基础的书,我认为这2本还是比较合适的,也足够了。 java编程思想。 这本书比较经典,但是最好能有最基本的基础后再来看这本书。 java的重点在于类,把类学好,重载、继承等等,学扎实了,后面才有提高。 这本书基本上将java的原理讲的很透彻。 java官方API文档。 没有比这更好的资料了,官方文档,详细介绍了java官方提供的所有类、接口、方法。 不论学什么语言,要想深入及提高,就必须去看官方文档。 不过官方文档更多的在于应用,没什么原理。 建议用到什么,查什么。 java比其他语言更简单,因此更容易制作很多高效的软件工程工具,如单元测试、重构等,有了扎实的基础,去学习一下这些东西可以提高编程的水平、效率和质量。 设计模式,非常经典,但非常抽象。 不过要想在面向对象语言上编程有所提高,这是必备的。 而且学了这个你会发现与C这种面向过程的语言的明显不同。 《设计模式》(人称GOF) 、《head first设计模式》重构,有人说重构是现代软件的面包和水,几乎天天用到,看似感觉不到重要性,但又十分重要。 重构主要是调整程序的结构,使得软件更容易面对变化。 《重构:改善既有代码的设计》单元测试工具Junit、UML工具等,很有必要去学。 编程其实没有难度,特别是java这种简单的语言,非常容易上手。 去学习设计模式等这些东西我认为更有用些,当然前提是有扎实的基础。

怎样对QVector进行添加和删除操作,该怎么处理

下面的例子就是对数据库进行添加删除修改的操作:Private Sub Command1_Click()For i = 0 To 5Text1(i) = Next = select * from & s1 & order by 编号 > 0 1(0) = G + Format((Val(Right(Trim((编号)), 4)) + 1), 0000)ElseText1(0) = G0001End IfEnd SubPrivate Sub Command2_Click()If = False Thenc = MsgBox(您确认要删除该记录吗?, vbOKCancel, 删除提示信息)If c = vbOK = select * from 人员表 IfElseMsgBox 当前数据库中没有可删除的数据记录, vbOKOnly, 提示信息End IfEnd SubPrivate Sub Command3_Click()If Text1(0) = Or Text1(1) = ThenMsgBox 请选择需要改动的记录信息!, vbOKOnly, 错误提示Elsec = MsgBox(确定要修改该记录吗?, vbOKCancel, 提示信息)If c = vbOK Then 如果确认修改的话进行修改操作If Text1(1) = ThenMsgBox 姓名不能为空值!, 48, 修改****Else连接所要修改的数据库 Provider=SQLOLEDB.1;Password=2752;Persist Security Info=True;User ID=sa;Initial Catalog=sample;Data Source=JAMLEEPC开始修改数据库 (UPDATE & s1 & SET 姓名= & Text1(1) & ,年龄= & Text1(2) & ,学历= & Text1(3) & ,年级= & Text1(4) & , 入学时间= & Text1(5) & where 编号= & Trim(Text1(0)) & )MsgBox 信息修改成功, 64, 修改**** = select * from 人员表 IfEnd IfEnd IfEnd SubPrivate Sub Command4_Click() = select * from 人员表 where 编号= + Text1(0) + > 0 ThenMsgBox 该信息已存在,信息保存不成功, 64, 保存****Elsecc = MsgBox(您确定要保存该信息吗?, 33, 信息保存提示)If cc = vbOK ThenIf Text1(1) = Or Text1(2) = Or Text1(3) = Or Text1(4) = Or Text1(5) = ThenMsgBox 请确认,人员的姓名、年龄、学历、年级和入学时间不能为空, 48, 保存**** Provider=SQLOLEDB.1;Password=2752;Persist Security Info=True;User ID=sa;Initial Catalog=sample;Data Source= (insert into 人员表 values( & Text1(0) & , & Text1(1) & , & Text1(2) & , & Text1(3) & , & Text1(4) & , & Text1(5) & ))MsgBox 信息修改成功, 64, 修改**** = select * from 人员表 IfElseEnd IfEnd IfSet = Adodc1End Sub希望我的回答可以帮到您哦

实验二 学生成绩管理系统 一、实验目的 使用标准C或C++实现学生成绩管理系统的录入、查询、删除、统计等基

/*这段程序暂时可以时间学生信息的录入,学生信息的显示,和按照平均成绩的由高到低的来显示学生信息。 其他部分也大同小异,你自己试试吧。 我刚回答了一个同样的问题,呵呵,顺便就都回答了吧。 程序可以运行Enterstudent函数实现学生信息的录入,showStudent实现学生信息的显示,paixu实现成绩由高到低排序显示。 */#include <iostream>#include <vector>#include <ctime>using namespace std;typedef struct St1 { char IDNumber[16];/*学号*/ char FamilyName[16]; /*姓*/ char GivenName[16]; /*名*/ int sex; /*性别(0代表“女”,1代表“男”)*/ int BirthYear; /*出生年*/ int BirthMonth; /*出生月*/ int BirthDay; /*出生日*/ float score[4]; /*成绩*/ float sum; /*总分*/ float average; /*平均分*/}StudentNode;void Enterstudent(vector<StudentNode>& student);int JudgeSex(int sex);void showStudent(vector<StudentNode>& student);int JudgeMouth(int mouth);void paixu(vector<StudentNode>& student); void main(){ vector<StudentNode> student; Enterstudent(student); cout<<显示学生信息<<endl; showStudent(student); cout<<成绩由高到低输出<<endl; paixu(student);} void Enterstudent(vector<StudentNode>& student){// int icount = 0; char cControl = 0; StudentNode stu; while (true) {cout<<录入学生信息,输入e录入结束:<<endl;cin>>cControl;if (e == cControl){ break;}else{ cout<<学号:; cin>>; cout<<姓:; cin>>; cout<<名:; cin>>; cout<<性别:; cin>>; if (JudgeSex()) {cout<<Wrong sex!<<endl;cout<<重新输入<<endl;continue; } cout<<出生年:; cin>>;/* if () {cout<<Wrong year<<endl;cout<<重新输入<<endl;continue; }*/ cout<<出生月:; cin>>; cout<<出生日:; cin>>; cout<<四科成绩:; cin>>[0]; cin>>[1]; cin>>[2]; cin>>[3]; for (int iloop = 0; iloop < 4; ++iloop) { = [iloop]; } = / 4; _back(stu);} }}void showStudent(vector<StudentNode>& student){ for (int iloop = 0; iloop < (); ++iloop) {cout<<学号:<<student[iloop]<<endl;cout<<姓:<<student[iloop]<<endl;cout<<名:<<student[iloop]<<endl;cout<<出生年:<<student[iloop]<<endl;cout<<各门成绩:<<student[iloop][0]<<,<<student[iloop][1]<< ,<<student[iloop][2]<<,<<student[iloop][3]<<endl;cout<<平均成绩:<<student[iloop]<<endl;cout<<endl; }}int JudgeSex(int sex){ if (sex == 0 || sex == 1) {return 0; } elsereturn 1;}/*int JudgeYear(int year){ struct tm* ptm; long ts; inty; ts= time(NULL); ptm = localtime(&ts); y = ptm-> tm_year+1900; //年 if (year < y) {return 1; } elsereturn 0;}*/int JudgeMouth(int mouth){ if (mouth > 12) {return 1; } else {return 0; }}void paixu(vector<StudentNode>& student){ StudentNode stu; for (int iloop = 0; iloop < () - 1; ++iloop) {int jloop = iloop + 1;int k = iloop;for (;jloop < ();++jloop){ if (student[iloop] < student[jloop]) {stu = student[iloop];student[iloop] = student[jloop];student[jloop] = stu; }} } showStudent(student);}

若对本页面资源感兴趣,请点击下方或右方图片,注册登录后

搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源

如有其他疑问,请咨询右下角【在线客服】,谢谢支持!

深入解析C++ vector 删除操作:从基础到高级 (深入解析css) 第2张

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~
欢迎你第一次访问网站!