STL删除元素
1、从vector中删除多个元素:
#include <iostream>
#include <vector> int main()
{
std::vector<int> vect;
for(int i = ; i <= ; i++)
{
vect.push_back(i);
} ///*
int size = vect.size();
for(unsigned int i = ; i < size;)
{
if(vect[i] % == )
{
vect.erase(vect.begin() + i);
size--;
}
else
{
i++;
}
}
//*/
/*
auto it = vect.begin();
while(it != vect.end())
{
if(*it % 2 == 1)
{
vect.erase(it);
}
else
{
it++;
}
}
*/ for(auto& item : vect)
{
std::cout<<"item:"<<item<<std::endl;
}
int main()
{
std::vector<int> vect;
for(int i = ; i <= ; i++)
{
vect.push_back(i);
} ///*
int size = vect.size();
for(unsigned int i = ; i < size;)
{
if(vect[i] % == )
{
vect.erase(vect.begin() + i);
size--;
}
else
{
i++;
}
}
//*/
/*
auto it = vect.begin();
while(it != vect.end())
{
if(*it % 2 == 1)
{
vect.erase(it);
}
else
{
it++;
}
}
*/ for(auto& item : vect)
{
std::cout<<"item:"<<item<<std::endl;
}
}
std::vector可以越界访问,如以下代码会输出0,而不会抛出异常。应该是由vector建立时的容量决定的。
#include <iostream>
#include <vector> int main()
{
std::vector<int> vect;
vect.push_back();
vect.push_back();
std::cout<<vect[]<<std::endl;
}
定义一个返回引用的函数,但如果接收的类型没有定义为引用类型,则仍会是复制,auto也是复制。如下:
#include <iostream>
#include <vector> class Test
{
Test(){};
public:
static Test& Instance()
{
static Test _instance;
return _instance;
}
std::vector<int>& get_vect()
{
return vect;
} std::vector<int> vect;
}; int main()
{
Test::Instance().vect.push_back();
Test::Instance().vect.push_back(); std::vector<int> vect = Test::Instance().get_vect(); //复制
//std::vector<int>& vect = Test::Instance().get_vect(); //引用 vect.push_back();
vect.push_back(); for(auto item : Test::Instance().vect)
{
std::cout<<item<<std::endl;
}
}
STL删除元素的更多相关文章
- STL容器删除元素的陷阱
今天看Scott Meyers大师的stl的用法,看到了我前段时间犯的一个错误,发现我写的代码和他提到错误代码几乎一模一样,有关stl容器删除元素的问题,错误的代码如下:std::vector< ...
- STL中用erase()方法遍历删除元素 .xml
pre{ line-height:1; color:#f0caa6; background-color:#2d161d; font-size:16px;}.sysFunc{color:#e54ae9; ...
- STL中用erase()方法遍历删除元素
STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.set.map).在使用erase方法来删除元素时 ...
- STL 中 使用迭代器删除元素的问题
在vector中删除,大家都知道,直接erase的话,这种写法很有问题.因为erase(iter)之后iter指针就变成野指针了,此时继续iter++就会出问题. for(auto iter = v. ...
- c++之STL容器删除元素
1.删除容器中特定值的元素 如果是容器vector,string,,deque,使用erase-remove 例如:erase-remove 注:因为container没有remove,contain ...
- STL进阶--删除元素
删除元素 从vector或deque删除元素 vector<int> vec = {1, 4, 1, 1, 1, 12, 18, 16}; // 删除所有的1 for (vector< ...
- STL容器迭代过程中删除元素技巧(转)
1.连续内存序列容器(vector,string,deque) 序列容器的erase方法返回值是指向紧接在被删除元素之后的元素的有效迭代器,可以根据这个返回值来安全删除元素. vector<in ...
- 如何在遍历中使用 iterator/reverse_iterator 删除元素
如何在遍历中使用 iterator/reverse_iterator 删除元素 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循“署名-非商业用途-保持一致”创作公 ...
- STL删除vector或list的方法及注意的问题
删除vector中的元素 1.删除指定的所有对象 STL中remove()只是将待删除元素之后的元素移动到vector的前端,而不是删除.若要真正移除,需要搭配使用erase().例子: vector ...
随机推荐
- css3的@media媒体查询
css3新功能,根据屏幕大小进行识别. 参考: http://www.runoob.com/cssref/css3-pr-mediaquery.html
- BZOJ2005 莫比乌斯反演
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=2005 实际上把这些被挡住的点的坐标和能量值列举出来可以发现有个公式: “对于坐标系第一象限任意 ...
- Busting Frame Busting: a Study of Clickjacking Vulnerabilities on Popular Sites
Busting Frame Busting Reference From: http://seclab.stanford.edu/websec/framebusting/framebust.pdf T ...
- string字符串的一系列操作
IndexOf() 查找字串中指定字符或字串首次出现的位置,返首索引值,如: str1.IndexOf("字"): //查找“字”在str1中的索引值(位置) str1.Index ...
- [iOS Keychain本地长期键值存储]
目前本地存储方式大致有:Sqlite,Coredata,NSUserdefaults.但他们都是在删除APP后就会被删除,如果长期使用存储,可以使用Keychain钥匙串来实现. CHKeychain ...
- 【Alpha阶段】第一次Scrum例会
个人任务报告 姓名 昨日已完成任务 明日计划任务 工作困难 岳桐宇 #20 撰写网站用户界面与体验改进方案文档 无 1. 与邓楚云的制定前端工作流程产生冲突,发生了不愉快的情况,最后在整个团队协商的情 ...
- persistent.xml hibernate 利用sql script 自定义生成 table 表
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http:// ...
- Android onLowMemory()和onTrimMemory()
1. OnLowMemory OnLowMemory是Android提供的API,在系统内存不足,所有后台程序(优先级为background的进程,不是指后台运行的进程)都被杀死时,系统会调用OnLo ...
- 转:Python K-means代码
#coding: UTF-8 import pearson_distance from pearson_distance import pearson_distance from math impor ...
- c#优化
优化反射 http://kb.cnblogs.com/page/172119/ http://www.2cto.com/kf/201301/182765.html http://blog.sina.c ...