给自己的VIM配置

编辑 .vimrc 文件如下:

filetype plugin on


"autocmd Filetype cpp,c,java,cs set omnifunc=cppcomplete#Complete
set nu
set nocp
set nobackup


let g:C_AuthorName      = 'gaoke'
let g:C_AuthorRef       = 'gaoke'
let g:C_Email           = 'gaoke@taomee.com'
let g:C_Company         = 'TAOMEE'
"let g:vimim_disable_smart_space=1
"let g:vimim_disable_chinese_punctuation=0
 


"autocmd BufEnter *.hpp  
if (    expand('%f')=~ ".hpp$"  ) 
let g:C_Comments = 'false' 
endif




set laststatus=2
autocmd BufEnter *.c  set filetype=cpp


"------------------------------------------------------------------------------
"获取当前路径的上一级的路径
function! GET_UP_PATH(dir)
let pos=len(a:dir)-1
while pos>0 
if (a:dir[pos]=="/" )
return strpart(a:dir,0,pos)
endif
let pos=pos-1 
endwhile
return  ""  
endfunction


"设置相关tags
function! s:SET_TAGS()
    "let dir = expand("%:p:h") "获得源文件路径
    let dir =getcwd()  "获得源文件路径
set tags=
"在路径上递归向上查找tags文件 
while dir!=""
if findfile("tags",dir ) !=""
"找到了就加入到tags
exec "set tags+=" . dir . "/tags"
endif
"得到上级路径
let dir=GET_UP_PATH(dir)
endwhile
if ( &filetype =="cpp" )
set tags+=~/.vim/tags
set tags+=~/.vim/tags_cpp
set tags+=~/.vim/tags_qt


endif
endfunction




"设置相关 include , for cmd : gf 
function! s:SET_PATH( find_dir )
    let dir = expand("%:p:h") "获得源文件路径
let dir_relative=''
let g:alternateSearchPath = ''
"let g:alternateSearchPath = 'sfr:../source,sfr:../src,sfr:../include,sfr:../inc,sfr:.'
"在路径上递归向上查找tags文件 
while dir!=""
if finddir(a:find_dir ,dir ) !=""
"找到了就加入到tags
exec "set path+=" . dir . "/". a:find_dir
let g:alternateSearchPath = g:alternateSearchPath.'sfr:'.dir_relative.a:find_dir."," 
endif
"得到上级路径
let dir_relative=dir_relative . "../"
let dir=GET_UP_PATH(dir)
endwhile
endfunction


autocmd BufEnter *.cpp,*.c,*.h call s:SET_TAGS() 
autocmd BufEnter *.php call s:SET_TAGS() 


autocmd BufEnter  *.cpp,*.c,*.h call s:SET_PATH("include") 
autocmd BufEnter  *.php call s:SET_PATH("pub") 


autocmd BufEnter *  set tabstop=4 
autocmd BufEnter /usr/include/c++/*  set tabstop=8  


autocmd BufEnter *    if ( &filetype == "php" )| map ,i <Esc>:e ~/DB/su/pub/| else | map ,i <Esc>:e ~/DB/include/| endif


"用于支持代码补全时,提示存在。
"set completeopt=menuone
inoremap <expr> <cr> pumvisible() ? "\<c-y>" : "\<c-g>u\<cr>"
"inoremap <expr> <c-n> pumvisible() ? "\<c-n>" : "\<c-n>\<c-r>=pumvisible() ? \"\\<down>\" : \"\\<cr>\""
inoremap <expr> <m-;> pumvisible() ? "\<c-n>" : "\<c-x>\<c-o>\<c-n>\<c-p>\<c-r>=pumvisible() ? \"\\<down>\" : \"\\<cr>\""


" 用于支持 . -> 代码补全
imap   <expr> <Backspace>  Ex_bspace() 
imap   <expr> <Space>  Ex_space("\<Space>") 


function! Ex_space ( char )

if (&filetype == "cpp" || &filetype == "c" )
let pre_str= strpart(getline('.'),0,col('.')-1)

if pumvisible() != 0  
"in completing , complete it    
return "\<CR>"
  elseif pre_str  =~ "[.][\s\t]*$" || pre_str  =~ "->[\s\t]*$"   
return "\<C-X>\<C-O>"
endif 
endif


if (&filetype == "python" ||&filetype == "html"  ||&filetype == "php"     )
let pre_str= strpart(getline('.'),0,col('.')-1)
if pumvisible() != 0  
"in completing , complete it    
return "\<CR>"
  elseif pre_str  =~ "[.][\s\t]*$" || pre_str  =~ "->[\s\t]*$"   
return "\<C-X>\<C-O>\<C-P>\<C-R>=pumvisible() ? \"\\<down>\" : \"\"\<cr>"
endif 

endif






"default
return a:char 
endf


function! Ex_bspace()
if (&filetype == "cpp" || &filetype == "c" )
let pre_str= strpart(getline('.'),0,col('.')-2)
  if pre_str  =~ "[.][ \t]*$" || pre_str  =~ "->[ \t]*$"   
return "\<Backspace>\<C-X>\<C-O>"
endif 
endif


if (&filetype == "python"|| &filetype == "html"  || &filetype == "python"  )
let pre_str= strpart(getline('.'),0,col('.')-2)
  if pre_str  =~ "[.][ \t]*$"
return "\<Backspace>\<C-X>\<C-O>\<C-P>\<C-R>=pumvisible() ? \"\\<down>\" : \"\"\<cr>"
endif 
endif


"default
return "\<Backspace>"
endf




function! FIND_PROTO()
    "let szLine = getline('.')
    "let startPos = getpos('.')[2]-1
    "let startPos = (startPos < 0)? 0 : startPos
    "if szLine[startPos] =~ '\w'
        "let startPos = searchpos('\<\w\+', 'cbn', line('.'))[1] - 1
    "endif


    "let startPos = (startPos < 0)? 0 : startPos
    "let szResult = matchstr(szLine, '\w\+', startPos)
""echo szResult 
endfunction 




".pc 文件设置为.ec 的高亮显示
"autocmd BufEnter *.pc  set filetype=esqlc 
".c  .h 文件设为 .cpp
autocmd BufEnter *.c  set filetype=cpp


"------------------------------------------------------------------------------
set guifont=Bitstream\ Vera\ Sans\ Mono\ 11 




"功能说明:加入或删除注释//
"映射和绑定
"nmap <C-C> <Esc>:Setcomment<CR>
"imap <C-C> <Esc>:Setcomment<CR>
"vmap <C-C> <Esc>:SetcommentV<CR>
"command! -nargs=0 Setcomment call s:SET_COMMENT()
"command! -nargs=0 SetcommentV call s:SET_COMMENTV()


"非视图模式下所调用的函数
function! s:SET_COMMENT()
let lindex=line(".")
let str=getline(lindex)
"查看当前是否为注释行
let CommentMsg=s:IsComment(str)
call s:SET_COMMENTV_LINE(lindex,CommentMsg[1],CommentMsg[0])
endfunction


function! SET_UAW()
let save_cursor = getpos(".")


let line = getline('.')
let col_num = col('.')
if match("ABCDEFGHIJKLMNOPQRSTUVWXYZ",line[col_num-1])!= -1
exec "normal! guaw"
else
exec "normal! gUaw"
endif


call setpos('.', save_cursor)
endfunction




function! MAKE_CUR_FILE()
let cur_file= expand("%f")
"split 


exec "normal! gUaw"
endfunction






"视图模式下所调用的函数
function! s:SET_COMMENTV()
let lbeginindex=line("'<") "得到视图中的第一行的行数
let lendindex=line("'>") "得到视图中的最后一行的行数
let str=getline(lbeginindex)
"查看当前是否为注释行
let CommentMsg=s:IsComment(str)
"为各行设置
let i=lbeginindex
while i<=lendindex
call s:SET_COMMENTV_LINE(i,CommentMsg[1],CommentMsg[0])
let i=i+1
endwhile
endfunction


"设置注释 
"index:在第几行
"pos:在第几列
"comment_flag: 0:添加注释符 1:删除注释符
function! s:SET_COMMENTV_LINE( index,pos, comment_flag )
let poscur = [0, 0,0, 0]
let poscur[1]=a:index
let poscur[2]=a:pos+1
call setpos(".",poscur) "设置光标的位置


if a:comment_flag==0 
"插入//
exec "normal! i//"
else 
"删除//
exec "normal! xx" 
endif 
endfunction


"查看当前是否为注释行并返回相关信息
"str:一行代码
function! s:IsComment(str)
let ret= [0, 0] "第一项为是否为注释行(0,1),第二项为要处理的列,
let i=0
let strlen=len(a:str)
while i<strlen
"空格和tab允许为"//"的前缀
if !(a:str[i]==' ' || a:str[i] == ' ' )
let ret[1]=i
if a:str[i]=='/' && a:str[i+1]=='/'
let ret[0]=1
else 
let ret[0]=0
endif
return ret
endif
let i=i+1
endwhile
return [0,0]  "空串处理
endfunction




"ab E EXEC SQL
"ab S SQLCODE
ab #x 薛朝文 
ab #l /*----------------------------------------------------------------------------*/
ab #b /******************************************************************************* 
ab #e *******************************************************************************/
ab #i #include
ab #d #define
set fileencodings=ucs-bom,utf-8,gb2312,big5,euc-jp,euc-kr,latin1
"set fileencoding=gb2312
set tabstop=4
set incsearch
set nohlsearch 
set cindent shiftwidth=4
command! Wq wq
command! W w
map ,n :n<CR>
map ,N :N<CR>
map ,a :A<CR>
map ,g :grep\s
"map <F6> <Esc>:/<C-R><C-W><Backspace><Backspace><Backspace><Backspace><CR>


map <F7> <Esc>:call Proto_find() <CR>
map <F6> <Esc>:call Proto_find() <CR>


"for grep cn 
function! Do_cn() 
try
exec "cn"
catch /E553/
exec "cc 1"
endtry
endfunction
function! P_grep_curword() 
"得到光标下的单词
let curword=expand("<cword>")
exec "grep " . curword . " *.cpp *.c *.h *.hpp " 
endfunction
map ,f <Esc>:call P_grep_curword() <CR>
map ,c <Esc>:call Do_cn() <CR>
map ,C <Esc>:cN<CR>




map ,r <Esc>:!~/.vim/mtags.sh<CR>
map ,m <Esc>:make<CR>


"转换单词大小写
map ,u <Esc>:call SET_UAW()<CR>


map ,p <Esc>:set paste<CR>i
autocmd InsertLeave * if &paste == 1|set nopaste |endif


"切换窗口
map ,w <Esc>:tabn<CR><C-W><C-W><CR>


if has("unix")
    map ,e :e <C-R>=expand("%:p:h") . "/" <CR>
else
    map ,e :e <C-R>=expand("%:p:h") . "\" <CR>
endif


map <F3> <Esc>yyp^6l<C-A>4l<C-A><Esc>
map <C-F12> :!ctags -R  --languages=c++ --c++-kinds=+p --fields=+iaS --extra=+q .<CR>




" 在视图模式下的整块移动
function! SET_BLOCK_MOVE_V( move_type )
if a:move_type==0  
exec "'<,'>s/^/ /"
else
exec "'<,'>s/^ //"
endif


let linecount = line("'>") - line("'<")
let save_cursor_begin = getpos("'<")
call setpos('.', save_cursor_begin)
exec  "normal! v" . linecount . "j"
endfunction


" 在正常模式下的整块移动
"大括号内向左移
:nmap <C-H> <Esc><i{
"大括号内向右移
:nmap <C-L> <Esc>>i{ 


"选择区移动
:vmap <C-L> <Esc>:call SET_BLOCK_MOVE_V(0) <CR>
:vmap <C-H> <Esc>:call SET_BLOCK_MOVE_V(1) <CR>


set smarttab
"set paste 
syn on
"定位到原来的位置
autocmd BufReadPost *
\ if line("'\"") > 0 && line ("'\"") <= line("$") |
\   exe "normal! g'\"" |
\ endif


"支持STL模板
let OmniCpp_DefaultNamespaces   = ["std", "_GLIBCXX_STD"]
let OmniCpp_SelectFirstItem = 2
"----------------------------------------------------------
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
"inoremap " ""<ESC>i
"inoremap ' ''<ESC>i
autocmd Syntax html,vim inoremap < <lt>><ESC>i| inoremap > <c-r>=ClosePair('>')<CR>
imap ) <c-r>=ClosePair(')')<CR>
imap ] <c-r>=ClosePair(']')<CR>
imap } <c-r>=CloseBracket()<CR>
"imap <CR> <c-r>=Fix_cr()<CR>
imap " <c-r>=QuoteDelim('"')<CR>
imap ' <c-r>=QuoteDelim("'")<CR>
inoremap { <c-r>=SET_BIG_PAIR()<CR>


function! SET_BIG_PAIR()
  if (&filetype=="php" )
if match( getline('.'), '"' ) >= 0
  return "{}\<ESC>i"
endif
  endif
  return "{\<CR>}\<ESC>O"
endf






function! ClosePair(char)
  if getline('.')[col('.') - 1] == a:char
    return "\<Right>"
  else
    return a:char
  endif
endf


function! Fix_cr()
 if pumvisible() == 0
  let line = getline('.')
  let col = col('.')
  if line[col-1] == '"' ||  line[col-1] == "'"  || line[col-1] == "]"  ||line[col-1] == ")"    
    "Escaping out of the string
    return "\<ESC>la"
endif
 endif
 return "\<CR>"


endf


function! CloseBracket()
if match(getline(line('.') + 1), '\s*}') < 0
return "\<CR>}"
else
return "\<ESC>j0f}a"
endif
endf




function! QuoteDelim(char)
  let line = getline('.')
  let col = col('.')


  if (&filetype == "vim")
    return a:char
  endif



  if line[col - 2] == "\\"
    "Inserting a quoted quotation mark into the string
    return a:char
  elseif line[col - 1] == a:char
    "Escaping out of the string
    return "\<Right>"
  else
    "Starting a string
    return a:char.a:char."\<ESC>i"
  endif
endf 
"autocmd CursorMovedI * if pumvisible() == 0|pclose|endif
"autocmd InsertLeave * if pumvisible() == 0|pclose|endif


set mouse=
"set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s
"------------------------------------------------
"source ~/.vim/borland.vim
"
"用于支持DB 协议查找 :cmd<->function<->in<->out
function! Proto_find() 


"得到光标下的单词
let curword=expand("<cword>")
  python get_proto_key(vim.eval("curword"),"find_word" )
"设置搜索寄存器
let  @/ = find_word 
call histadd("/", find_word )
"查找下一个..
exec "normal! n"
endfunction






"得到光标下的单词
function! GetCurWord()
return expand("<cword>")
    "let szLine = getline('.')
    "let startPos = getpos('.')[2]-1
    "let startPos = (startPos < 0)? 0 : startPos
    "if szLine[startPos] =~ '\w'
        "let startPos = searchpos('\<\w\+', 'cbn', line('.'))[1] - 1
    "endif


    "let startPos = (startPos < 0)? 0 : startPos
    "let szResult = matchstr(szLine, '\w\+', startPos)
    "return szResult
endfunc


function! s:UserDefPython()
python << PYTHONEOF
import re
import sys 
import vim 
def get_proto_key(word,stroe_name):
if (word.isupper()):
word=word.lower();


if  re.search ("_in$", word ): value= word[:-3] 
elif  re.search ("_in_header$", word ): value=word[:-10] 
elif  re.search ("_out_header$", word ): value=word[:-11] 
elif  re.search ("_out$", word ): value=word[:-4] 
elif  re.search ("_cmd$", word ): value=word[:-4].lower() 
elif  re.search ("_out_item$", word ): value=word[:-9] 
elif  re.search ("_in_item$", word ): value=word[:-8] 
else: value=word 
if value!= word: 
key="\<%s_CMD\>\|\<%s\>\|\<%s_in\>\|\<%s_in_header\>\|\<%s_out_header\>\|\<%s_out\>\|\<%s_in_item\>\|\<%s_out_item\>"%(value.upper(), 
value,value,value,value,value,value,value)
else: key=word
vim.command("silent let %s='%s'" % (stroe_name,key))
PYTHONEOF
endfunction


if has('python')
call s:UserDefPython()
endif




autocmd BufRead,BufNewFile *.py set ai
autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class




"ok this is added by gaoke"
set nocompatible


" allow backspacing over everything in insert mode
set backspace=indent,eol,start


set autoindent      " always set autoindenting on
if has("vms")
  set nobackup      " do not keep a backup file, use versions instead
else
  set backup        " keep a backup file
endif
set history=50      " keep 50 lines of command line history
set ruler       " show the cursor position all the time
set showcmd     " display incomplete commands
set incsearch       " do incremental searching


" For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries
" let &guioptions = substitute(&guioptions, "t", "", "g")


" Don't use Ex mode, use Q for formatting
map Q gq


" This is an alternative that also works in block mode, but the deleted
" text is lost and it only works for putting the current register.
"vnoremap p "_dp


" Switch syntax highlighting on, when the terminal has colors
" Also switch on highlighting the last used search pattern.
if &t_Co > 2 || has("gui_running")
  syntax on
  set hlsearch
endif


" Only do this part when compiled with support for autocommands.
if has("autocmd")


  " Enable file type detection.
  " Use the default filetype settings, so that mail gets 'tw' set to 72,
  " 'cindent' is on in C files, etc.
  " Also load indent files, to automatically do language-dependent indenting.
  filetype plugin indent on


  " For all text files set 'textwidth' to 78 characters.
  autocmd FileType text setlocal textwidth=78


  " When editing a file, always jump to the last known cursor position.
  " Don't do it when the position is invalid or when inside an event handler
  " (happens when dropping a file on gvim).
  autocmd BufReadPost *
    \ if line("'\"") > 0 && line("'\"") <= line("$") |
    \   exe "normal g`\"" |
    \ endif


endif " has("autocmd")a
" 预设一个tags
set tags=tags,../tags


let $d_name_pre=strtrans(system("dirname `pwd`"))
" fix: system return value with a ^@ tail
let d_name=strpart($d_name_pre, 0, stridx($d_name_pre, "^@"))
if d_name =~ "^/home/zog/linux.*"
    set tags=/home/zog/linux/tags
endif


set backupdir=~/vim_backup
set noignorecase
set so=15
set shiftwidth=4
set tabstop=4
set fencs=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
map <F7> :make<CR>
map <F12> :q <CR>
map <F8> /$^ <CR>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445051.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell一文入门通

简单来说“Shell编程就是对一堆Linux命令的逻辑化处理”。 W3Cschool 上的一篇文章是这样介绍 Shell的 hello world 学习任何一门编程语言第一件事就是输出HelloWord了&#xff01;下面我会从新建文件到shell代码编写来说下Shell 编程如何输出Hello World。 (1)新建一个文件…

算法(9)--两个数的最大公约数

两个数的最大公约数1.辗转相除法求解两个数的最大公约数2.更相减损术求解两个数的最大公约数3.不严格理解1.辗转相除法求解两个数的最大公约数 辗转相除法&#xff1a;两个正整数a和b&#xff08;a>b&#xff09;的最大公约数等于a除以b的余数与b 之间的最大公约数。–如果…

RPC编程

图 3 说明在客户机和服务器之间完成 RPC 涉及的步骤。 图 3. 在客户机和服务器之间完成 RPC 涉及的步骤服务器 RPC 应用程序初始化期间它会向 RPC 运行时库注册接口。需要注册接口是因为&#xff0c;客户机在向服务器发出远程过程调用时&#xff0c;要检查它是否与服务器兼容。…

synchronized使用和原理全解

synchronized是Java中的关键字&#xff0c;是一种同步锁。它修饰的对象有以下几种&#xff1a; 修饰一个方法 被修饰的方法称为同步方法&#xff0c;其作用的范围是整个方法&#xff0c;作用的对象是调用这个方法的对象&#xff1b; 修饰一个静态的方法 其作用的范围是整个…

RPC学习笔记

在查看libc6-dev软件包提供的工具&#xff08;用 dpkg -L libc6-dev 命令&#xff09;的时候&#xff0c;发现此软件包提供了一个有用的工具rpcgen命令。通过rpcgen的man手册看到此工具的作用是把RPC源程序编译成C语言源程序&#xff0c;从而轻松实现远程过程调用。下面的例子程…

算法(10)-leetcode-explore-learn-数据结构-链表双指针技巧

leetcode-explore-learn-数据结构-链表21.概述2.例题2.1 环形链表判断2.2 环形链表22.3 相交链表2.4 删除链表的倒数第N个节点3.小结本系列博文为leetcode-explore-learn子栏目学习笔记&#xff0c;如有不详之处&#xff0c;请参考leetcode官网&#xff1a;https://leetcode-cn…

一个简单的游戏服务器框架

最近看到百度空间的一个帖子&#xff0c;不错&#xff0c;在这里整理下&#xff0c;转载至我的博客里&#xff0c;开始自己慢慢琢磨写一个框架。 我先从上层结构说起&#xff0c;一直到实现细节吧&#xff0c;想起什么就写什么。 第一部分 服务器逻辑 服务器这边简单的分为三…

堆和栈的精华大总结

Java内存分配原理 栈、堆、常量池虽同属Java内存分配时操作的区域&#xff0c;但其适用范围和功用却大不相同。 一般Java在内存分配时会涉及到以下区域&#xff1a; ◆寄存器&#xff1a;我们在程序中无法控制 ◆栈&#xff1a;存放基本类型的数据和对象的引用&#xff0c;但…

算法(11)-leetcode-explore-learn-数据结构-链表的经典问题

leetcode-explore-learn-数据结构-链表31.反转一个链表2.移除链表元素3.奇偶链表4.回文链表5.小结本系列博文为leetcode-explore-learn子栏目学习笔记&#xff0c;如有不详之处&#xff0c;请参考leetcode官网&#xff1a;https://leetcode-cn.com/explore/learn/card/linked-l…

探索式软件测试

James A.Whittaker [美] 詹姆斯惠特克&#xff08;软件测试领域绝对的大师&#xff09;著作《Exploratory Software Testing》&#xff0c;中文名《探索式软件测试》&#xff0c;记得当时被这本书深深吸引啦&#xff08;我不知道有多少做测试的小伙伴看过这本书&#xff09;&am…

Linux线程池的设计

我设计这个线程池的初衷是为了与socket对接的。线程池的实现千变万化&#xff0c;我得这个并不一定是最好的&#xff0c;但却是否和我心目中需求模型的。现把部分设计思路和代码贴出&#xff0c;以期抛砖引玉。个人比较喜欢搞开源&#xff0c;所以大家如果觉得有什么需要改善的…

算法(12)-leetcode-explore-learn-数据结构-双链表的设计

leetcode-explore-learn-数据结构-链表4双链表的设计本系列博文为leetcode-explore-learn子栏目学习笔记&#xff0c;如有不详之处&#xff0c;请参考leetcode官网&#xff1a;https://leetcode-cn.com/explore/learn/card/linked-list/所有例题的编程语言为python 双链表的设…

安全方面知识

什么是文件上传漏洞 文件上传漏洞是指 由于程序员在对用户文件上传部分的控制不足或者处理缺陷&#xff0c;而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件 这里上传的文件可以是木马&#xff0c;病毒&#xff0c;恶意脚本或者WebShell等。 这种攻击方式是…

CE游戏外挂工具

CHEAT ENGINE(以下简称CE)是我见过的最优秀的游戏作弊工具。它的优点多不胜数&#xff0c;虽然单独从搜索游 戏里面的数值来说&#xff0c;它并不比其他同类软件强多少&#xff0c;但它不仅仅是个游戏修改工具&#xff0c;它还有其他游戏修改软件所没有的一些特点&#xff0c;例…

外挂编程-动作模拟技术

几乎所有的游戏都有大量繁琐和无聊的攻击动作以增加玩家的 功力,还有那些数不完的迷宫,这些好像已经成为了角色游戏的代名词。现在,外挂可以帮助玩家从这些繁琐而无聊 的工作中摆脱出来。 1. 鼠标模拟技术 几乎所有的游戏中都使用了鼠标来改变角色的位置和方向,玩家仅用…

算法(13)-leetcode-explore-learn-数据结构-链表小结

leetcode-explore-learn-数据结构-链表51.小结2.例题2.1合并两个有序链表思路1:迭代思路2:递归2.2 两数相加2.3 扁平化多级双向链表2.4 复制带随机指针的链表2.5 旋转链表本系列博文为leetcode-explore-learn子栏目学习笔记&#xff0c;如有不详之处&#xff0c;请参考leetcode…

leetcode121买卖股票的最佳时机

给定一个数组&#xff0c;它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易&#xff08;即买入和卖出一支股票&#xff09;&#xff0c;设计一个算法来计算你所能获取的最大利润。 注意你不能在买入股票前卖出股票。 示例 1: 输入: [7,1,5,3,6,…

epoll的内核实现

epoll是由一组系统调用组成。 int epoll_create(int size); int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); int epoll_wait(int epfd, struct epoll_event *events,int maxevents, int timeout); select/poll的缺点在于&#xff1…

算法(14)-数据结构-二叉树

leetcode-explore-learn-数据结构-二叉树10.概述1.深度优先遍历dfs1.1先序遍历-中左右1.2中序遍历-左中右1.3后序遍历-左右中2.广度优先遍历bfs3.遍历-常见问题3.1 二叉树的最大深度自顶向下自底向上3.2对称二叉树3.3路径总和4.重构-常见问题4.1根据中序和后序遍历序列构造二叉…

多进程鱼多线程的权衡选择

最近有好多人在网上问道做游戏开发框架用多线程还是多进程呢,或者两者之间的优缺点,等等类似的问题。下边小高就带您小小分析一下: 1、首先要明确进程和线程的含义:进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一…