编程题常用知识点的review。

most important:  想好(1)详尽步骤(2)边界特例,再开始写代码。

I.vector

#include <iostream>
//0.头文件。 特性: 连续存储,动态双倍分配增长
#include <vector>
#include <algorithm> //relevant
using namespace std; bool comp(int a,int b){
return a>b;
} int main(){ //1.创建与初始化
vector<int> v1(,);
vector<int> v2(v1); //也可拷贝初始化 vector<int> v2=v1;
vector<vector<int>> ivec(,v1); //二维vector //2.返回数量与判断空
if(v1.empty())
cout<<"it's empty";
auto n=v1.size(); //3.修改元素与遍历元素
for(int i=;i<n;i++)
v1[i]=; vector<int>::iterator it; //迭代器
for(it=v1.begin();it!=v1.end();it++)
*it=; //4.插入与删除元素
v1.push_back();
v1.pop_back(); v1.insert(v1.begin()+, ); //把9插入到第3个元素后面
v1.erase(v1.begin()+); //把第3个元素后面的那个元素删掉 //5.相关函数 reverse sort
reverse(v1.begin(),v1.end());
sort(v1.begin(),v1.end(),comp); //等价于 sort(v1.rbegin(),v1.rend()); }

II.linked list

#include <iostream>
#include <vector>
//0.struct struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {} //定义了节点的初始化方法
}; using namespace std; int main(){ vector<int> ivec{,,,,,};
//1.创建与初始化
ListNode *head=new ListNode(); //申请一个新节点,注意 head= new ListNode(0)与 head= ListNode(0)的区别
ListNode *p=head,*q;
for(auto i:ivec){ //此乃尾插法,还有头插法,根据情况选择合适的,注意现在有头节点
q=new ListNode(i);
p->next=q;
p=q;
} //2.遍历元素、插入删除元素
p=head;
while(p->next!=NULL){
if(p->next->val==){
q=new ListNode();
q->next=p->next->next;
p->next=q;
}
} /* 3.经典操作: (1) 原地reverse——头插法和尾插法的运用;
(2) 判断cycle——快慢指针;
(3) 找中间节点、找间隔节点——快慢指针;
}
*/ }

III.stack && queue

#include <iostream>
#include <vector> //0.头文件 经常以vector模拟
#include <stack>
#include <queue> using namespace std; int main(){ //1.stack 创建与初始化,基本操作 push pop top empty size
stack<int> myStack;
myStack.push();
myStack.push();
cout<<myStack.top()<<endl;
myStack.pop();
cout<<myStack.size()<<myStack.empty()<<endl; //2.queue 创建与初始化,基本操作 push pop front back empty size
queue<int> myQueue;
myQueue.push();
myQueue.push();
cout<<myQueue.front()<<endl;
cout<<myQueue.back()<<endl;
myQueue.pop();
cout<<myQueue.size()<<myQueue.empty()<<endl; }

IV.map

#include <iostream>
//0.头文件 优点:快速访问/空间换时间/桶的思想,key用来去重,value用来存辅助信息。注意,有时直接用数组进行hash,而不需要借助<map>
#include <map>
using namespace std; int main(){ //1.创建
map<string,int> myMap; //2.访问、修改、增加元素
myMap["Tom"]=; myMap["Lucy"]=; myMap["Jack"]=; //3.删除元素
myMap.erase("Tom"); //也可使用 myMap.erase(myMap.find("hi")); //4.通过key查找元素
if (myMap.find("Tom")==myMap.end())
cout<<myMap.count("Tom")<<endl; //5.遍历,map内部以key的升序排列
for(auto it=myMap.begin();it!=myMap.end();it++){
cout<<it->first<<endl;
cout<<it->second<<endl;
} }

V.string

#include <iostream>
#include <vector>
//0.头文件
#include <string>
#include<sstream> //辅助 using namespace std; int main(){ //1.创建,初始化
string x="hello world",y="ld s";
getline(cin,y); //获得一行,也可再加个终止符参数 //2.常用函数与vector相同 empty, size, push_back, 下标访问 //3.+ - < > =运算符的重载 //4.关于字符变量函数 isalnum,isalpha,isdigit tolower,toupper //5.获得子串
string sub=x.substr(,); // 第1个位置开始,长度为3的子串 //6.交换两个字符串
y.swap(x); //7.查找字串
auto t=y.find(x,);
if(t!=string::npos)
cout<<t; //8.split功能
istringstream strcin(x);
string s;
vector<string> res;
while(strcin >> s)
res.push_back(s); }

VI.bit manipulation

  1. 与                          a&b          1010&1100=1000   
  2. 或                      a|b         1010|1100=1110
  3. 异或                              a^b          1010^1100=1001
  4. 按位取反                         ~a            ~1010=0101
  5. 左移                              a<<1      1010<<1=10100
  6. 带符号右移                     a>>1        -1010>>1=-101
  7. 无符号右移                     a>>>1
 
 

programming review (c++): (1)vector, linked list, stack, queue, map, string, bit manipulation的更多相关文章

  1. STL中stack/queue/map以及Boost unordered_map 的使用方法

    一.stackstack 模板类的定义在<stack>头文件中.stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要的,在不指定容器类型时,默认的容器类型 ...

  2. java三篇博客转载 详解-vector,stack,queue,deque

    博客一:转载自http://shmilyaw-hotmail-com.iteye.com/blog/1825171 java stack的详细实现分析 简介 我们最常用的数据结构之一大概就是stack ...

  3. STL容器用法速查表:list,vector,stack,queue,deque,priority_queue,set,map

      list vector deque stack queue priority_queue set [unordered_set] map [unordered_map] multimap [uno ...

  4. STL容器适配器 stack, queue

    stack是一种后进先出(last in first out)的数据结构.它只有一个出口,如图所示.stack允许新增元素,删除元素,取得最顶端元素.但除了最顶端外,没有其他任何地方可以存储stack ...

  5. Stack&&Queue

    特殊的容器:容器适配器 stack     queue     priority_queue:vector+堆算法---->优先级队列 stack:     1.栈的概念:特殊的线性结构,只允许 ...

  6. 数据结构设计 Stack Queue

    之前在简书上初步总结过几个有关栈和队列的数据结构设计的题目.http://www.jianshu.com/p/d43f93661631 1.线性数据结构 Array Stack Queue Hash ...

  7. POJ 3096 Surprising Strings(STL map string set vector)

    题目:http://poj.org/problem?id=3096 题意:给定一个字符串S,从中找出所有有两个字符组成的子串,每当组成子串的字符之间隔着n字符时,如果没有相同的子串出现,则输出 &qu ...

  8. PAT 1039 Course List for Student (25分) 使用map<string, vector<int>>

    题目 Zhejiang University has 40000 students and provides 2500 courses. Now given the student name list ...

  9. js in depth: event loop & micro-task, macro-task & stack, queue, heap & thread, process

    js in depth: event loop & micro-task, macro-task & stack, queue, heap & thread, process ...

随机推荐

  1. layui 的单选框

    <div class="layui-form-item"> <label class="layui-form-label">是否通过&l ...

  2. 移动GIS技术在城市信息采集中的应用

    1 引言 随着移动平板电脑和手机(以下简称移动终端)在软硬件上的更新换代,和3G.4G通讯网络的升级,传统测绘和和数据服务方式正在发生巨大变化.以城市中的外业踏勘和信息采集为例,移动终端正成为主要的外 ...

  3. java 基于tcp客户端服务端发送接收数据

    客户端: package demo03; import java.io.IOException; import java.io.InputStream; import java.io.OutputSt ...

  4. Java多线程之Thread、Runnable、Callable及线程池

    一.多线程 线程是指进程中的一个执行流程,一个进程中可以有多个线程.如java.exe进程中可以运行很多线程.进程是运行中的程序,是内存等资源的集合,线程是属于某个进程的,进程中的多个线程共享进程中的 ...

  5. querySelector和getElementById之间的区别

    一.概述 今天在看js的时候发现里面的代码基本上都是用querySelector()和querySelectorAll()来获取元素,就有点疑惑为什么不用getElementById(),可能也是因为 ...

  6. protobuf3 语法解析

    定义一个消息类型 先来看一个非常简单的例子.假设你想定义一个“搜索请求”的消息格式,每一个请求含有一个查询字符串.你感兴趣的查询结果所在的页数,以及每一页多少条查询结果.可以采用如下的方式来定义消息类 ...

  7. Java Servlet Filter

    做web开发的人对于Filter应该不会陌生,一直在很简单的使用,但是一直没有系统的总结一下,随着年纪的慢慢长大,喜欢总结一些事情,下面说说我对Filter的理解,官方给出的Filter的定义是在请求 ...

  8. Move resources allocated using unmanaged interface to managed devm interface

    转载:http://blog.csdn.net/swingboard/article/details/27207497   So today let’s talk about devm functio ...

  9. 防止ddos攻击

    1.防止ddos攻击 :接入层过滤器,去判断非法请求ip地主(如果请求过多,自己加入黑名单),上传至防火墙黑名单,不再录入 2.防止xss/css攻击 :在接入层,有第三方jra包工具类,过滤所有请求

  10. Android 日期对话框DatePickerDialog

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@ ...