memset
将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作,其返回值为指向S的指针。
比如
private:
bool isEnd;
Trie* next[26];
public:
Trie(){
isEnd = false;
memset(next,0,sizeof(next)); //初始化next指针并设置为空
}
vector
**向量(Vector)**是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。
特性
- 顺序序列:顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。
- 动态数组:支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算述进行该操作。提供了在序列末尾相对快速地添加/删除元素的操作。
- 能够感知内存分配器的(Allocator-aware):容器使用一个内存分配器对象来动态地处理它的存储需求。
简单介绍
- vector<类型>标识符
- vector<类型>标识符(最大容量)
- vector<类型>标识符(最大容量,初始值)
快速上手实例
#include <string.h>
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int>obj;//创建一个向量存储容器 int
for(int i=0;i<10;i++) // push_back(elem)在数组最后添加数据
{
obj.push_back(i); //添加元素到最后
cout<<obj[i]<<",";
}
for(int i=0;i<5;i++)//去掉数组最后一个数据
{
obj.pop_back();
}
cout<<"\n"<<endl;
for(int i=0;i<obj.size();i++)//size()容器中实际数据个数
{
cout<<obj[i]<<",";
}
return 0;
}
方法大全
1.构造函数
- vector(): 创建一个空vector
- vector(int nSize): 创建一个vector,元素个数为nSize
- vector(int nSize,const t& t): 创建一个vector,元素个数为nSize,且值均为t
- vector(const vector&): 复制构造函数
- vector(begin,end): 复制[begin,end)区间内另一个数组的元素到vector中
2.增加函数
- void push_back(const T& x): 向量尾部增加一个元素X
- iterator insert(iterator it,const T& x): 向量中迭代器指向元素前增加一个元素x
- iterator insert(iterator it,int n,const T& x) :向量中迭代器指向元素前增加n个相同的元素x
- iterator insert(iterator it,const_iterator first,const_iterator last) :向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据
3.删除函数
- iterator erase(iterator it) 删除向量中迭代器指向元素
- iterator erase(iterator first,iterator last): 删除向量中[first,last)中元素
- void pop_back(): 删除向量中最后一个元素
- void clear() :清空向量中所有元素
4.遍历函数
- reference at(int pos) :返回pos位置元素的引用
- reference front(): 返回首元素的引用
- reference back(): 返回尾元素的引用
- iterator begin(): 返回向量头指针,指向第一个元素
- iterator end() :返回向量尾指针,指向向量最后一个元素的下一个位置
- reverse_iterator rbegin() :反向迭代器,指向最后一个元素
- reverse_iterator rend(): 反向迭代器,指向第一个元素之前的位置
5.判断函数
- bool empty() const: 判断向量是否为空,若为空,则向量中无元素
6.大小函数
- int size() const: 返回向量中元素的个数
- int capacity() const: 返回当前向量所能容纳的最大元素值
- int max_size() const :返回最大可允许的vector元素数量值
7.其他函数
- void swap(vector&): 交换两个同类型向量的数据
- void assign(int n,const T& x): 设置向量中前n个元素的值为x
- void assign(const_iterator first,const_iterator last): 向量中[first,last)中元素设置成当前向量元素
unordered_map
C++ 11标准中加入了unordered系列的容器。unordered_map记录元素的hash值,根据hash值判断元素是否相同。map相当于java中的TreeMap,unordered_map相当于HashMap。无论从查找、插入上来说,unordered_map的效率都优于hash_map,更优于map;而空间复杂度方面,hash_map最低,unordered_map次之,map最大。
快速上手
unordered_map<string,double> myrecipe; //定义string 类型key和double类型value 名字叫myrecipe
/****************插入*****************/
pair<string,double> myshopping ("baking powder",0.3);//pair是把两个类型合并成一个
myrecipe.insert (myshopping); // 复制插入
myrecipe.insert (make_pair<string,double>("eggs",6.0)); // 移动插入
myrecipe.insert (mypantry.begin(), mypantry.end()); // 范围插入
myrecipe.insert ({{"sugar",0.8},{"salt",0.1}}); // 初始化数组插入(可以用二维一次插入多个元素,也可以用一维插入一个元素)
myrecipe["coffee"] = 10.0; //数组形式插入
display(myrecipe,"myrecipe contains:");
/****************查找*****************/
//查找key若没有查找到则返回最后一个
unordered_map<string,double>::const_iterator got = myrecipe.find ("coffee");
if ( got == myrecipe.end() )
cout << "not found";
else
cout << "found "<<got->first << " is " << got->second<<"\n\n";
//this->first key值
//this->second value值
/****************修改*****************/
myrecipe.at("coffee") = 9.0;
myrecipe["milk"] = 3.0;
/****************擦除*****************/
myrecipe.erase(myrecipe.begin()); //通过位置
myrecipe.erase("milk"); //通过key
myrecipe.clear(); //清空
/****************遍历*****************/
nordered_map<string,string> mymap =
{
{"house","maison"},
{"apple","pomme"},
{"tree","arbre"},
{"book","livre"},
{"door","porte"},
{"grapefruit","pamplemousse"}
};
/************begin和end迭代器***************/
cout << "mymap contains:";
for ( auto it = mymap.begin(); it != mymap.end(); ++it )
cout << " " << it->first << ":" << it->second;
cout << endl;
/************bucket操作***************/
unsigned n = mymap.bucket_count();
cout << "mymap has " << n << " buckets.\n";
for (unsigned i=0; i<n; ++i)
{
cout << "bucket #" << i << "'s size:"<<mymap.bucket_size(i)<<" contains: ";
for (auto it = mymap.begin(i); it!=mymap.end(i); ++it) //begin(i)中有参数的是表示指向桶内第i个元素的开始 同理end(i)表示指向桶内第i个元素的末尾
cout << "[" << it->first << ":" << it->second << "] ";
cout << "\n";
}
cout <<"\nkey:'apple' is in bucket #" << mymap.bucket("apple") <<endl;
cout <<"\nkey:'computer' is in bucket #" << mymap.bucket("computer") <<endl;
return 0;
}