[C++] STL vector map set

编程入门 行业动态 更新时间:2024-10-19 22:36:51

[C++] STL <a href=https://www.elefans.com/category/jswz/34/1762381.html style=vector map set"/>

[C++] STL vector map set

Vector


可以理解为动态数组,可存储重复元素。

初始化:

vector<int> a;
vector<int> a(5);        //5 elements is 0
vector<int> a(5,8);        //5 elements is 8//数组初始化vector
int a[] = {1,2,3};
vector<int> haha(a,a + sizeof(a)/sizeof(int));//二维vector
vector<vector<int>> matrix(n,m);    // n rows; m cols
vector<vector<int>> matrix(n,vector<int>(m,9));    // n rows; m cols; all elements is 9

访问:

a[i]        //不检查越界
a.at(i)        //访问越界抛异常

迭代:

for(vector<int>::iterator iter = a.begin();iter != a.end();iter++)    //迭代器
for(int i = 0;i < a.size();i++)        //指针

其他函数:

.size(); .push_back(); .pop_back(); .clear(); .resize();.capacity(); .reserve(); .erase(); .empty(); .count();
//a.size() <= a.capacity()

find  在vector中并没有自带的.find方法,可以使用普通的find函数完成功能。

vector<int> a;
int b = ****;
vector<int>::iterator iter = find(a.begin(),a.end(),b);
if(find(a.begin(),a.end(),b) == a.end())
{cout<<"Not find!"<<endl;
}

其中 .erase()这个函数在使用时要特别注意。 .size()减少了一,.capacity()不变。

使用迭代器iterator访问时,  .erase()之后,这个iterator就指向下一个了,此时执行iterator++就会跳过一个元素未访问。

for(vector<int>::iterator iter = nums.begin();iter != nums.end();)
{if(! *iter)        //去掉vector中的0元素
    {nums.erase(iter);}else{iter++;}
}

.size()的返回值是无符号整型,在循环中,如果遇到空vector时进行 -1 操作会出问题。

vector<int> haha;
for(int i = 0;i < haha.size() - 1;i++)
{cout<<"haha"<<i<<endl;
}
int vSize = haha.size();
for(int i = 0;i < vSize;i++)
{cout<<"hehe"<<i<<endl;
}

output: haha1

不会输出hehe1,因为.size()的返回值是无符号整型,因此使用时要注意!

插一个不错的表格,转自

 

Map

关联容器(key-value),key不能重复,对key自动排序。

map<int,string> a;

插入元素:(第一种和第二种的效果相同,对已有的key值,不进行插入操作。第三种指针型的,能够对已有的key值进行覆盖。)

a.insert(pair<int,string>(2,"haha"));
a.insert(map<int,string>::value_type(2,"haha"));
a[2] = "haha";

删除:

a.erase(iter);    //迭代器
a.erase(key);    //键值
a.erase(a.begin(),a.end());  //成片删除,前闭后开

搜索和访问:

iter = a.find(key);
iter->first        //key
iter->second    //value

 

Set

集合,有序,不包含重复元素,元素值唯一(与vector的主要区别)。集合内元素都是排列好的,所有的存取插入操作都在log(n)内完成。

set不能直接改变元素值,这样会改变原有的正确顺序,必须先删除旧元素,再插入新元素。

set<int> a;
set<int,myFunc> a;    //使用自定义的比较函数进行排序
struct myFunc
{bool operator()(const char* s1,const char* s2){return strcmp(s1,s2) < 0;}
}const char* carray[] = {"abc","def","xyz"};
set<const char* ,myFunc> a(carray,carray+3,myFunc());

set不可直接访问下标!!!只能用迭代器。

set<string> a;
set<string>::iterator iter;
for(iter = a.begin();iter != a.end();iter++)

用vector初始化set.

vector<string> list1;
set<string> _list1;
_list1.insert(list1.begin(),list1.end());

判断插入元素是否成功用.second

if(a.insert(7).second)

判断元素是否属于集合

if(a.find(4) != a.end())

集合的并,交和差(注意在此前要将c清为空集)

#include<algorithm>
#include<iterator>

set_union(a.begin(),a.end(),b.begin(),b.end(),insert_iterator<set<int> >(c,c.begin()));
set_intersection(a.begin(),a.end(),b.begin(),b.end(),insert_iterator<set<int> >(c,c.begin()));
set_difference(a.begin(),a.end(),b.begin(),b.end(),insert_iterator<set<int> >(c,c.begin()));

 

Reference

.html



.html

 

转载于:.html

更多推荐

[C++] STL vector map set

本文发布于:2024-02-26 05:59:55,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1701546.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:vector   STL   set   map

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!