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 ...
随机推荐
- 【BZOJ-2599】Race 点分治
2599: [IOI2011]Race Time Limit: 70 Sec Memory Limit: 128 MBSubmit: 2590 Solved: 769[Submit][Status ...
- CSS3伪类选择器:nth-child()(nth-child(odd)/nth-child(even))
nth-child(odd):奇数 nth-child(even):偶数 使用时,如果是精确到数字时,切记是从同一级别的元素开始计算,而不是指定某个类才开始计算. 比如: <li>< ...
- CSS基础知识真难啊-background-渐变
文章参考 http://www.zhangxinxu.com/wordpress/?p=727 http://www.uqu8.com/html/2014/html-css_1105/176.html ...
- 对iOS中Delegate的理解
首先 协议protocol 和委托delegate 是两个完全不同的概念 放在一起说 是因为我们总是在同一个头文件里看到它们: 首先解释一下什么是委托 :举个例子 ,我工作的时候给你打电话,让你帮我 ...
- [COCI2012Final]Pro1
校内OJ上的题. 数据范围非常小,用暴搜就可以,加点剪枝阶乘级别的复杂度竟然可以跑得比$O(N^4)$的算法还要快QAQ. 我用的是Floyd,参考了别人的代码.大概就是先跑个Floyd把点点之间路径 ...
- mysql中max_allowed_packet参数的配置方法(避免大数据写入或者更新失败)
修改方法 1.修改配置文件 可以编辑my.cnf来修改(windows下my.ini),在[mysqld]段或者mysql的server配置段进行修改. 代码如下: max_allowed_packe ...
- response压缩响应
思路:1.通过filter向目标页面传递一个自定义的response对象 2..在这个response对象中通过重写getOutputStream方法和getWriter方法使目标资源调用 该方法输出 ...
- css014 响应式web设计
css014 响应式web设计 一. 响应式web设计基础知识 1.rwd的三大理念:a.用于布局的弹性网络, b.用于图片和视频的弹性媒体,c.为不同屏幕宽度创建的不同样式的css媒体查询. ...
- putty配色方案
最近用腻了putty默认的配色方案,所以打算换一下配色. 使用的是修改注册表的方法. 1.打开注册表:运行——>regedit 2.找到对应的注册表文件,并导出:注册表地址 HKEY_CURRE ...
- Java递归算法——二分查找
import java.lang.reflect.Array; import java.nio.Buffer; import java.util.Arrays; import java.util.Ra ...