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 ...
随机推荐
- 【poj2774】 Long Long Message
http://poj.org/problem?id=2774 (题目链接) 题意 给出两个只包含小写字母的字符串,求出最长连续公共子串. solution 第一次用后缀数组,感觉有点神...才发现原来 ...
- Subime学习记录
一.快捷键 注:快捷键这种东西没有必要刻意去记,自己需要就去查查,经常用的自然熟了,关键是时刻保持提高效率的意识,才会主动去发现快捷键. 1.Ctrl + F:查找 2.F12:根据函数定位函数声明( ...
- Markdown中的缩进
Markdown中怎么实现段首的缩进 把输入法的半角改为全角,在Markdown文中直接空格就能实现缩进,测试时一个空格是一个汉字的距离. html中的代码: 或 -- 半个汉字的距离. 或 ...
- 数据结构与算法分析–Minimum Spanning Tree(最小生成树)
给定一个无向图,如果他的某个子图中,任意两个顶点都能互相连通并且是一棵树,那么这棵树就叫做生成树(spanning tree). 如果边上有权值,那么使得边权和最小的生成树叫做最小生成树(MST,Mi ...
- shell 中 &&和||的方法
Shell && 和 || shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 $? 中.当 $? == 0 时,表示执行成功:当 $? == 1 时 ...
- HTML 速查列表
HTML 基本文档 <!DOCTYPE html> <html> <head> <title>文档标题</title> </head& ...
- javascript 字符串加密的几种方法
8进制 /*8进制加密*/ function EnEight(){ var monyer = new Array();var i,s; for(i=0;i<txt.value.length;i+ ...
- Yocto开发笔记之《串口驱动调试》(QQ交流群:519230208)
QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 ======================================================== 串口驱动各 ...
- elasticsearch api
count curl -XGET http://21.3.5.121:9200/ipv4geo/service/_count -d '{"query":{"match&q ...
- Datatable的Select()
利用datatable的select方法筛选出符合条件的datarow进行操作 Select() Select(string filterExpression) Select(string filte ...