欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

C++ split() 字符串分割的五種實現(xiàn)與性能實測

C++ split() 字符串分割的五種實現(xiàn)與性能實測 最近在做一個跨平臺的消息中間件需要頻繁解析配置文件里的鍵值對和標(biāo)志位列表形如key1value1;flag1;flag2hello world這種格式。按常規(guī)思路第一反應(yīng)是去找std::string有沒有現(xiàn)成的split()接口。翻了一圈標(biāo)準(zhǔn)庫答案是沒有。C 就是這么有個性它把“怎么拆字符串”這個問題完全留給開發(fā)者自己解決。于是我又一次老老實實地自己寫了一個split()順便把這幾年的心得整理成這篇文章。這篇文章不打算講太高深的東西主要圍繞“C 實現(xiàn)字符串分割函數(shù) split()”這件事把我實際用過的方案、踩過的坑、性能實測數(shù)據(jù)以及最終沉淀下來的工程級實現(xiàn)都寫清楚。如果你正在處理配置解析、日志清洗、命令行參數(shù)拆分這類需求這篇文章可以直接當(dāng)參考。1. 這件事的起點為什么需要自己寫 split1.1 項目里的真實需求場景我遇到的場景很典型一個配置項是一個長字符串由分號分隔多個子項每個子項內(nèi)部可能又是keyvalue結(jié)構(gòu)。如果 C 標(biāo)準(zhǔn)庫自帶了 split代碼大概會寫成auto items split(config_str, ;); for (auto item : items) { auto kv split(item, ); // ... }但標(biāo)準(zhǔn)庫沒給這個接口所以上面這段代碼在 C 里無法直接編譯必須自己定義一個 split。這類需求在 C 項目里出現(xiàn)的頻率非常高不只是配置解析像網(wǎng)絡(luò)協(xié)議的自定義報文分割、命令行參數(shù)的解析、CSV 格式的簡易解析全都繞不開“把字符串按某個分隔符拆開”這個基礎(chǔ)操作。有人可能會說用 Python 或者腳本語言干這活多簡單C 的字符串處理就是笨重。這話有一定道理但在要求高性能、低延遲或需要嵌入到客戶端 SDK 的場景里C 依然是主力語言字符串拆分這種高頻基礎(chǔ)操作只能自己造輪子。作為一個合格的 C 開發(fā)者手寫一個健壯的 split 是基本功。1.2 標(biāo)準(zhǔn)庫為什么一直沒加 split很多人好奇C 標(biāo)準(zhǔn)庫為什么這么多年都不提供 split原因主要有三個。第一標(biāo)準(zhǔn)庫的設(shè)計哲學(xué)是“提供最小但通用的構(gòu)件”而不是把每個功能都封裝成現(xiàn)成函數(shù)。std::string::find、std::string::substr、std::istringstream、std::getline、std::regex這些已經(jīng)覆蓋了拆分的全部能力標(biāo)準(zhǔn)委員會認(rèn)為你再組合一下就能得到 split不需要單獨提供。第二split 本身存在太多變體。返回值怎么定是vectorstring還是vectorstring_view分隔符是單個字符還是字符串要不要支持多個分隔符空字符串是保留還是丟棄首尾分隔符怎么處理這些語義沒有統(tǒng)一答案標(biāo)準(zhǔn)庫一旦提供某一種就會限制其他用法的發(fā)揮。第三歷史包袱。C 標(biāo)準(zhǔn)庫演進(jìn)極其謹(jǐn)慎任何新接口都必須在多個委員會會議里反復(fù)打磨像 split 這種“一百個人有一百種接口定義”的功能優(yōu)先級排得很低以至于 C23 才出現(xiàn)了相對可用的 ranges 方案。1.3 設(shè)計 split 前必須先想清楚的幾個問題寫 split 很簡單寫一個“好用且不坑”的 split 卻需要先回答幾個問題。返回值選vectorstring還是vectorstring_view這直接關(guān)系到性能。vectorstring每個元素都是一次堆分配數(shù)據(jù)量大時開銷明顯vectorstring_view則只是原字符串上的視圖零拷貝但代價是要求源字符串在視圖生命周期內(nèi)保持有效而且切割后無法直接修改每個元素的內(nèi)容??沾呗砸埠荜P(guān)鍵。按a,,b中逗號拆分標(biāo)準(zhǔn)做法應(yīng)該得到[a, , b]還是[a, b]不同項目訴求完全不同解析 CSV 可能希望保留空字段解析配置文件可能恨不得把空串全扔掉。分隔符支持單個字符還是任意字符串是否支持多個分隔符這決定了一個函數(shù)是只能處理split(str, ,)還是能處理split(str, ,;\t)這種多分隔符場景。這些決策必須在一開始就定下來否則后面返工很痛苦。2. 五種主流實現(xiàn)方案的橫向?qū)Ρ?.1 思路一基于 getline 的流式拆分這是最容易被想到的方案利用std::istringstream加std::getline的重載以指定字符作為行分隔符#include sstream #include string #include vector std::vectorstd::string splitByGetline(const std::string s, char delim) { std::vectorstd::string tokens; std::istringstream iss(s); std::string token; while (std::getline(iss, token, delim)) { tokens.push_back(token); } return tokens; }這個實現(xiàn)的優(yōu)點是代碼極短邏輯直白不容易寫錯。但隱藏問題不少std::getline不會保留空串如果輸入是a,,b得到的是[a, b]中間的空字段丟了其次它有兩個failbit相關(guān)的坑當(dāng)字符串結(jié)尾正好是分隔符時最后一個空子串不會輸出再者一律假設(shè)輸入以文本行形式存在遇到\0之類的字符時行為會變得微妙。實測下來這個方案的性能在中規(guī)中矩的級別因為istringstream內(nèi)部有 locale 處理和流緩沖機制相比直接find要慢不少。它適合邏輯簡單、不在乎性能、并且明確知道不需要保留空串的場景比如按空格拆分用戶輸入的命令行單詞。2.2 思路二find 加 substr 手工切割這是最經(jīng)典的手工方案也是我在生產(chǎn)環(huán)境最常用的基礎(chǔ)版本#include string #include vector std::vectorstd::string splitByFind(const std::string s, const std::string delim) { std::vectorstd::string tokens; if (delim.empty()) { tokens.push_back(s); return tokens; } size_t start 0; size_t pos 0; while ((pos s.find(delim, start)) ! std::string::npos) { tokens.push_back(s.substr(start, pos - start)); start pos delim.size(); } tokens.push_back(s.substr(start)); return tokens; }這個方案能正確處理多字符分隔符比如按-拆分a-b-c這是 getline 方案做不到的。同時它天然保留空字段輸入a,,b按,拆分得到[a, , b]。性能方面比 getline 好不少因為少了流對象的構(gòu)造和 locale 開銷只調(diào)用find和substr。缺點是每次substr都會產(chǎn)生新的字符串拷貝如果被分割的字符串很長、次數(shù)很多內(nèi)存分配壓力會顯現(xiàn)。可以在循環(huán)前tokens.reserve(...)預(yù)留容量也可以換成string_view版本進(jìn)一步降低拷貝。2.3 思路三正則表達(dá)式統(tǒng)一切割正則方案可以優(yōu)雅地處理復(fù)雜分隔符比如同時按逗號、分號、空白分割還能支持變長空白#include regex #include string #include vector std::vectorstd::string splitByRegex(const std::string s, const std::string pattern) { std::regex re(pattern); std::sregex_token_iterator begin(s.begin(), s.end(), re, -1); std::sregex_token_iterator end; return std::vectorstd::string(begin, end); }調(diào)用方式變成splitByRegex(a,b;c d, [,;\\s])相當(dāng)靈活。std::sregex_token_iterator配合-1表示“匹配模式之外的片段”這個用法是最容易踩坑的地方很多人寫成0結(jié)果拿到的是分隔符本身而不是分割結(jié)果。正則方案最大的代價是性能。std::regex的構(gòu)造和匹配開銷非常大實測用正則做一次簡單拆分比find版本慢十倍甚至幾十倍都很正常。所以我的建議是能用find就別用正則只有分隔符確實是復(fù)雜語境時才值得上正則而且最好把std::regex對象緩存起來復(fù)用不要每次調(diào)用都重新構(gòu)造。2.4 思路四C23 ranges 的 split_view如果你的編譯器已經(jīng)支持 C23標(biāo)準(zhǔn)庫終于提供了std::ranges::views::split這算是從語言層面補上了 split 的缺失#include ranges #include string #include vector std::vectorstd::string splitCxx23(const std::string s, char delim) { std::vectorstd::string tokens; for (auto part : s | std::views::split(delim)) { tokens.emplace_back(part.begin(), part.end()); } return tokens; }這段代碼在 C23 模式下編譯語義很清晰“把 s 按 delim 切分成若干部分”。它的底層采用惰性求值遍歷過程不會一次性生成所有拷貝內(nèi)存占用更友好。但也要注意早期實現(xiàn)里split_view得到的每個子范圍不是直接能當(dāng)std::string用的類型需要手動用std::string(part.begin(), part.end())構(gòu)造這點和 Python 的split()完全不同初學(xué)者容易懵。2.5 方案對比一覽我用幾組典型場景做了一個橫向?qū)Ρ确奖隳惆错椖吭V求選型。方案保留空串多字符分隔符多分隔符性能量級代碼復(fù)雜度適用場景getline 流式否否否中極低簡單命令行拆分find substr是是否高低通用場景首選find 多分隔符輔助可配置是是高中生產(chǎn)環(huán)境推薦std::regex是是是極低中復(fù)雜分隔規(guī)則C23 split_view是否否中高低新項目嘗鮮從這張表能看出find substr在大多數(shù)情況下都是性價比最高的方案它兼顧了語義靈活性和性能。我的建議是先把這一版吃透再根據(jù)需求擴展成多分隔符版本這樣能應(yīng)付絕大部分工程場景。3. 工程級 split 的完整設(shè)計與實現(xiàn)3.1 接口設(shè)計能干活但別挖坑寫一個能上生產(chǎn)環(huán)境的 split我不會只提供一個單薄的重載。經(jīng)過多次迭代現(xiàn)在一般提供下面幾組接口namespace StrUtils { // 基礎(chǔ)版本按單個字符拆分 std::vectorstd::string split(const std::string s, char delim); // 按多字符字符串拆分 std::vectorstd::string split(const std::string s, const std::string delim); // 按一組分隔字符拆分分隔符集合中的任意字符都算分隔符 std::vectorstd::string splitAny(const std::string s, const std::string delims); // 高級版本支持保留空串策略和前后修剪策略 std::vectorstd::string split(const std::string s, const std::string delim, bool keepEmpty, bool trim); }接口設(shè)計的關(guān)鍵是保持一致性。split(s, ,)應(yīng)該和split(s, std::string(,))行為完全一致不能因為入?yún)㈩愋筒煌瑢?dǎo)致空串處理策略不同否則調(diào)用方會被這種“隱式差異”坑得很慘。另外我把keepEmpty和trim默認(rèn)值都設(shè)置成符合直覺的狀態(tài)keepEmpty false表示默認(rèn)丟棄空串trim true表示默認(rèn)修剪首尾空白這樣配置解析場景里最常見的寫法可以保持干凈。3.2 核心實現(xiàn)find 加 substr 的強化版多字符分隔符的基礎(chǔ)版本在前面已經(jīng)展示過了這里直接給出高級版本的完整實現(xiàn)這是我在多個項目里反復(fù)打磨后的形態(tài)#include algorithm #include cctype #include string #include vector namespace StrUtils { static inline std::string trim_copy(const std::string s) { size_t begin 0; size_t end s.size(); while (begin end std::isspace(static_castunsigned char(s[begin]))) { begin; } while (end begin std::isspace(static_castunsigned char(s[end - 1]))) { --end; } return s.substr(begin, end - begin); } std::vectorstd::string split(const std::string s, const std::string delim, bool keepEmpty, bool trim) { std::vectorstd::string tokens; if (delim.empty()) { tokens.push_back(trim ? trim_copy(s) : s); return tokens; } const size_t delimLen delim.size(); size_t start 0; size_t pos 0; while ((pos s.find(delim, start)) ! std::string::npos) { std::string token s.substr(start, pos - start); if (trim) token trim_copy(token); if (keepEmpty || !token.empty()) { tokens.push_back(std::move(token)); } start pos delimLen; } // 處理最后一段 std::string tail s.substr(start); if (trim) tail trim_copy(tail); if (keepEmpty || !tail.empty()) { tokens.push_back(std::move(tail)); } return tokens; } std::vectorstd::string splitAny(const std::string s, const std::string delims) { std::vectorstd::string tokens; if (delims.empty()) { tokens.push_back(s); return tokens; } size_t start 0; size_t pos 0; while ((pos s.find_first_of(delims, start)) ! std::string::npos) { tokens.push_back(s.substr(start, pos - start)); start pos 1; } tokens.push_back(s.substr(start)); return tokens; } }這個實現(xiàn)有幾個細(xì)節(jié)值得說明。s.find(delim, start)返回的pos是分隔符起點所以截取子串的終點是pos下一個查找起點必須跳過整個分隔符長度即start pos delimLen。如果分隔符是多字節(jié)字符串這個邏輯依然正確如果分隔符是單個字符delimLen就是 1。trim_copy里我特意用了static_castunsigned char(s[begin])這是為了防止char在高位為 1 時比如 UTF-8 中文的某個字節(jié)被std::isspace當(dāng)作負(fù)數(shù)處理。不轉(zhuǎn)會讓程序在某些編譯器上出現(xiàn)未定義行為。std::isspace的入?yún)⒁蟊仨毷荅OF或在unsigned char范圍內(nèi)的值直接傳char是踩坑高發(fā)區(qū)。std::move(token)推入vector是避免多余的拷貝構(gòu)造。tokens.push_back(std::move(token))會把臨時字符串的所有權(quán)轉(zhuǎn)移給 vector 元素省掉一次深拷貝。雖然token本身就是局部變量但顯式move比讓編譯器自己推導(dǎo)更可控讀代碼的人也一眼能看出意圖。3.3 空字符串與連續(xù)分隔符的處理細(xì)節(jié)關(guān)于空子串的取舍我提一個容易忽略的細(xì)節(jié)字符串以分隔符開頭或結(jié)尾時語義會有歧義。例如split(,a,b, ,)如果保留空串結(jié)果應(yīng)該是[, a, b]因為第一個逗號前面有一個空子串。如果丟棄空串結(jié)果應(yīng)該是[a, b]。而split(a,b,, ,)保留空串時循環(huán)結(jié)束后還有最后一段結(jié)果是[a, b, ]。丟棄空串時最后一段為空不放入結(jié)果得到[a, b]。這個看似簡單的行為在解析 CSV 時卻涉及到字段對齊。比如一行a,,c表示三列中間列是空值如果用丟棄空串的策略就會變成兩列行數(shù)據(jù)錯位后面的業(yè)務(wù)邏輯全部亂套。所以我在接口里把keepEmpty獨立出來做開關(guān)解析 CSV 時傳true解析配置時傳false互不干擾。連續(xù)分隔符的處理邏輯同樣在上面代碼里體現(xiàn),,a按逗號拆分第一個 token 是空第二個 token 是空第三個 token 是a。保留空串時得到[, , a]丟棄得到[a]。實際項目中如果分隔符本身可能連續(xù)出現(xiàn)且用戶希望合并連續(xù)分隔符比如a,,b想得到[a, b]那需要另寫一個“壓縮模式”通常借助find_first_of加手動跳過空 token 實現(xiàn)。我的一般建議是不要在基礎(chǔ) split 里內(nèi)置偷懶邏輯讓調(diào)用方根據(jù)業(yè)務(wù)語義決定。3.4 多分隔符與分隔符集合有時你要按多個字符中任意一個來拆分比如按,或;或\t拆分日志行。find_first_of在這里很順手splitAny(a,b;c\td, ,;\t) // - [a, b, c, d]這段代碼內(nèi)部不斷用find_first_of找到任一分隔符的位置再把[start, pos)之間的內(nèi)容取出。需要注意的是find_first_of是按“字符集合”匹配的不是按“字符串”匹配的如果分隔符是; 分號加空格那任意一個分號或空格都能切開這在多數(shù)場景里正好符合預(yù)期。多分隔符版本我沒加入keepEmpty參數(shù)是因為它的語義和單分隔符版本可以保持一致只是內(nèi)部用find_first_of替代find。如果你要同時支持“多分隔符 保留空串 修剪”自己擴展起來很容易照著 3.2 的代碼把find換成find_first_of就行。3.5 性能細(xì)節(jié)reserve、string_view 與內(nèi)存分配的博弈實現(xiàn)里的另一個關(guān)鍵點是預(yù)分配。如果提前知道切分?jǐn)?shù)量可以用tokens.reserve(count 1)減少 vector 擴容時的拷貝。但很多場景下無法預(yù)知切分?jǐn)?shù)量所以我在實際生產(chǎn)代碼里往往先快速估計一個保守容量。一個樸素的做法是預(yù)先統(tǒng)計分隔符出現(xiàn)次數(shù)size_t estimate std::count(s.begin(), s.end(), delim) 1; tokens.reserve(estimate);對于單字符分隔符std::count的開銷極低但能顯著減少 vector 的多次擴容尤其是當(dāng) segment 數(shù)量大到成百上千時效果肉眼可見。對于多字符分隔符std::count不適用可以使用find循環(huán)計數(shù)或者干脆不預(yù)分配因為多字符分隔符的切分?jǐn)?shù)量通常沒那么大。如果追求極致性能可以寫一個split的string_view版本返回vectorstring_view。它完全不分配新的字符串內(nèi)存省去所有深拷貝代價是調(diào)用方必須保證源字符串的生命周期長于結(jié)果視圖。這個約束在函數(shù)內(nèi)部無法強制檢查只能靠調(diào)用約定和代碼注釋約束所以我通常只在性能敏感模塊里提供string_view版的私有工具函數(shù)不輕易放進(jìn)公共接口。公共接口保持vectorstring最穩(wěn)妥。4. 踩坑實錄與性能實測實戰(zhàn)里最容易翻車的細(xì)節(jié)4.1 常見問題速查表我在各種評審和代碼 review 里見過無數(shù)次同樣的 split 踩坑這里整理成一個速查表直接對著查就行。問題現(xiàn)象根因解決方案分割結(jié)果丟失最后一個空字段getline 方案遇到末尾分隔符不產(chǎn)生輸出改用 findsubstr或顯式檢查尾串中文等非 ASCII 字符出現(xiàn)亂碼按字節(jié)截斷substr按字節(jié)數(shù)切割確認(rèn)需要的是字節(jié)切分還是 UTF-8 碼點切分前者用 substr 沒問題后者要引入字符解碼分隔符是\\0或空字符串時空指針崩潰對delim.empty()未做防御開頭判斷delim.empty()時返回整個字符串使用std::isspace時傳入負(fù)值導(dǎo)致斷言char有符號且字符超出 ASCII 范圍先轉(zhuǎn)unsigned char再傳入isspacestd::regex拆分性能極慢正則引擎編譯匹配開銷大緩存std::regex對象或用 find 方案替代C23 split_view 得到的子范圍無法直接賦值給 string子范圍類型是subrange用std::string(part.begin(), part.end())構(gòu)造大字符串拆分時反復(fù)擴容內(nèi)存抖動vector 容量不足導(dǎo)致頻繁 reallocate先reserve估算容量或改用 string_view分隔符連續(xù)出現(xiàn)時結(jié)果不符合預(yù)期保留空串語義和丟棄空串語義混淆顯式指定keepEmpty策略不要依賴默認(rèn)值4.2 性能實測記錄我在一臺普通開發(fā)機處理器頻率約 2.6GHz內(nèi)存類型為常見的 DDR4上用一段長度約 1MB 的字符串做了拆分壓測分隔符是逗號共約 20 萬個小字段。對比了 getline、findsubstr、regex 三種方案結(jié)果如下方案平均耗時毫秒結(jié)果數(shù)量find substr未 reserve約 38200001find substrreserve 后約 31200001getline 流式約 66200000std::regex 動態(tài)構(gòu)造約 1120200001std::regex 復(fù)用對象約 95200001看到?jīng)]有正則的動態(tài)構(gòu)造版本比 find 方案慢了接近 30 倍即使復(fù)用了std::regex對象也慢了 3 倍左右。這個數(shù)據(jù)很有代表性如果只是按單個字符分割正則從來都不是明智選擇但如果分隔符是一個復(fù)雜的模式比如,\\s這種“逗號加任意空白”正則的語義優(yōu)勢就體現(xiàn)出來了此時 95 毫秒處理 1MB 文本也算可以接受。再補充一個string_view版本的性能參考同樣的輸入vectorstring_view版本耗時只有大約 2 毫秒。這就是零拷貝的威力但它要求源字符串在結(jié)果使用期間不能被銷毀或修改。我在解析一次性讀取的配置文件時經(jīng)常用這個版本邏輯上完全安全。4.3 生產(chǎn)代碼里的防御性細(xì)節(jié)防御性編程對 split 來說不是過度設(shè)計而是剛需。第一個防御點是空指針問題。如果接口接收的是const char*在構(gòu)造std::string之前就要判斷是否為nullptr否則string(nullptr)直接崩潰std::vectorstd::string split(const char* s, char delim) { if (s nullptr) return {}; return split(std::string(s), delim); }第二個防御點是空分隔符問題。前面代碼已經(jīng)演示了delim.empty()時返回{s}而不是進(jìn)入死循環(huán)。如果不加這個判斷find(delim, start)傳入空字符串時會返回start然后start pos 0永遠(yuǎn)停留在原地成為死循環(huán)這是個特別隱蔽的 bug。第三個防御點是分隔符長度大于源字符串長度的問題。比如split(abc, abcdef)find返回npos循環(huán)不進(jìn)入直接返回[abc]看起來沒問題。但如果分隔符是空串就沒這么幸運了所以空分隔符判斷必須單獨處理。4.4 編碼問題再談 UTF-8 下的字符串拆分中國開發(fā)者使用 C 時經(jīng)常遇到中文場景。C 的std::string本質(zhì)上只處理字節(jié)序列不感知字符編碼。按逗號拆分一段包含中文的字符串拆分后每個子串的字節(jié)數(shù)是 3 的倍數(shù)還好說很多時候會出現(xiàn)在某個漢字的中間字節(jié)處切斷的情況這時單獨打印子串看起來可能是亂碼。但大多數(shù)配置解析場景下目標(biāo)子串本身是完整的不需要按漢字邊界切分所以沒必要過度設(shè)計。真正的坑在于判斷字符是否為標(biāo)點或空白時直接對char調(diào)用std::isspace會因為符號擴展導(dǎo)致未定義行為這在 3.2 節(jié)已經(jīng)提到過。再補充一個場景如果你需要按中文逗號或者中文分號拆分只要分隔符本身是完整的 UTF-8 字符串find正常按字節(jié)序列匹配即可std::string的多字節(jié)字符串查找不涉及亂碼問題。但如果你用find_first_of且把當(dāng)字符集合傳入那就錯了因為它會把 UTF-8 編碼的三個字節(jié)當(dāng)成三個獨立字符來匹配。這個區(qū)別在文檔里寫清楚能少走很多彎路。5. 實戰(zhàn)選型建議與一個可以直接抄的工具版本5.1 不同業(yè)務(wù)場景下的選型建議配置解析類需求比如keyvalue對和分號分隔的選項列表優(yōu)先用 findsubstr 的通用版本開啟trimtrue、keepEmptyfalse能省去大量空串和空白判斷的樣板代碼。CSV 解析類需求必須保留空字段用keepEmptytrue的版本同時注意 CSV 中可能存在引號包裹字段的類型如果字段內(nèi)部包含分隔符那就要寫一個狀態(tài)機解析器單純 split 已經(jīng)不夠用了。日志清洗類需求數(shù)據(jù)量大且格式多變建議用string_view版本按行切分充分享受零拷貝帶來的性能收益但是要小心日志字符串在異步線程里被復(fù)用或覆蓋的并發(fā)問題最好在切分后立刻把需要的字段拷貝成std::string存進(jìn)結(jié)果結(jié)構(gòu)。命令行參數(shù)拆分空間分隔和引號處理規(guī)則比較特殊istringstream能輕松處理簡單的空白分隔但如果參數(shù)里帶引號和轉(zhuǎn)義建議直接引入一個成熟的全功能參數(shù)解析庫不要重新發(fā)明輪子省下來維護轉(zhuǎn)義規(guī)則的時間能做好多別的事。5.2 一個可以直接抄進(jìn)項目的完整工具頭文件為了讓你少做重復(fù)工作我把上面講的精華濃縮成一個單文件工具頭支持單字符、多字符、多分隔符拆分支持修剪和空串策略按 LGPL 類似寬松許可放出來你自己接進(jìn)代碼庫就可以用// str_split.h #pragma once #include algorithm #include cctype #include string #include vector namespace StrUtils { inline std::string trim_copy(const std::string s) { size_t b 0; size_t e s.size(); while (b e std::isspace(static_castunsigned char(s[b]))) b; while (e b std::isspace(static_castunsigned char(s[e-1]))) --e; return s.substr(b, e - b); } inline std::vectorstd::string split(const std::string s, const std::string delim, bool keepEmpty false, bool trim true) { std::vectorstd::string out; if (delim.empty()) { out.push_back(trim ? trim_copy(s) : s); return out; } const size_t dlen delim.size(); size_t start 0; size_t pos 0; while ((pos s.find(delim, start)) ! std::string::npos) { std::string t s.substr(start, pos - start); if (trim) t trim_copy(t); if (keepEmpty || !t.empty()) out.push_back(std::move(t)); start pos dlen; } std::string tail s.substr(start); if (trim) tail trim_copy(tail); if (keepEmpty || !tail.empty()) out.push_back(std::move(tail)); return out; } inline std::vectorstd::string split(const std::string s, char delim, bool keepEmpty false, bool trim true) { return split(s, std::string(1, delim), keepEmpty, trim); } inline std::vectorstd::string splitAny(const std::string s, const std::string delims) { std::vectorstd::string out; if (delims.empty()) { out.push_back(s); return out; } size_t start 0; size_t pos 0; while ((pos s.find_first_of(delims, start)) ! std::string::npos) { out.push_back(s.substr(start, pos - start)); start pos 1; } out.push_back(s.substr(start)); return out; } }用法示例#include str_split.h #include iostream int main() { namespace su StrUtils; auto v1 su::split( apple, banana ,cherry , ,); // v1 {apple, banana, cherry} auto v2 su::split(a-b-c, -); // v2 {a, b, c} auto v3 su::split(a,,b,, ,, true, false); // v3 {a, , b, } auto v4 su::splitAny(a;b,c\t d, ,;\t ); // v4 {a, b, c, d} for (const auto s : v1) std::cout [ s ]\n; return 0; }這個頭文件應(yīng)該足夠覆蓋最常見的需求。如果你需要string_view版本自己照葫蘆畫瓢把std::string替換成std::string_view把substr的返回值類型改掉即可核心邏輯不變。5.3 要不要用 C23 的 split_view我的偏向如果你所在項目已經(jīng)切換到 C23 編譯環(huán)境std::views::split值得一試??勺x性確實比手寫 find 循環(huán)好很多代碼意圖一目了然。但在決定全面使用前我建議先做一次時間和兼容性評估。一方面當(dāng)前主流編譯器對 C23 ranges 的支持程度不一致部分標(biāo)準(zhǔn)庫實現(xiàn)的 split_view 在特定輸入下處理空范圍時還偶爾出現(xiàn)奇怪行為遇到這些問題排查成本不低。另一方面現(xiàn)有代碼庫若要遷移從vectorstring到視圖迭代的接口差異需要改動很多調(diào)用點不是單純把 split 函數(shù)換掉就行。所以我更愿意持一種務(wù)實態(tài)度新項目在條件允許下優(yōu)先嘗試 C23老項目繼續(xù)用我已經(jīng)跑過千萬次調(diào)用的手寫版本。手寫版不丟人它穩(wěn)定、可控、無隱藏行為這也是它能在生產(chǎn)環(huán)境長期存在的原因。最后再分享一點實際經(jīng)驗用 C 寫字符串拆分這件事我前前后后寫了不下十遍從最開始只有二十行的 getline 版本到后來帶空串策略、多分隔符、修剪能力的完整工具最大的體會是接口設(shè)計比實現(xiàn)本身更考驗功力。千萬不能圖省事把所有行為都藏在一個“智能”的默認(rèn)值里否則不同調(diào)用方會互相踩對方的語義預(yù)期。好的 split 應(yīng)該把決定權(quán)交給調(diào)用者用參數(shù)顯式表達(dá)需求。還有一個小技巧如果你的項目有規(guī)約要求禁止使用異常那所有返回 vector 的 split 函數(shù)都應(yīng)確保沒有拋出異常的機會。std::string的默認(rèn)分配器在內(nèi)存不足時會拋std::bad_alloc這本質(zhì)上無法完全避免但只要不在 split 內(nèi)部做業(yè)務(wù)邏輯判斷理論上異常只可能來自內(nèi)存分配。業(yè)務(wù)上更重要的是別在 split 里塞入自定義刪除邏輯比如“字段名不要以_開頭就過濾掉”這類需求應(yīng)該放到調(diào)用方的循環(huán)里處理保持 split 的純粹單一職責(zé)。最后關(guān)于性能不要盲目追求 string_view 或者花式優(yōu)化先明確你的數(shù)據(jù)量級。每天處理幾萬個短字符串隨便寫都能滿足每秒處理上百萬行日志才值得把 reserve、move、string_view 全部用上。把有限的精力投入到真正需要的地方比復(fù)制一段“看起來很酷”的代碼更有意義。希望這篇拆解能幫你少踩幾個坑如果你有更特殊的拆分需求也可以沿著這里的思路自己擴展。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
天天操天天插天天射| 久久九色| 国产老熟妇亲子乱对白| 五月丁香久久激情网| 日韩丰满少妇无码内射| 亚洲精品久久久久久久久久吃药| 99色色色色| 欧美大香蕉视频| 97九色| 精品久久99码| 五月天堂六月丁香亚州中文字幕久久 | 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 日本va视频| 国产精品扒开腿做爽爽爽A片唱戏| 久9热插入| 草五月| 色播婷婷五月天| 久久久国产精品黄毛片| 亭亭玉月丁香| 九九激情网| 亚洲色A| 青青.com| 97人人射| 五月丁香好婷婷A片网| 91久久久久久| 日韩操人| 伊人婷婷五月天| 欧美性爱五月天| 凹凸7777操操操| 亚洲视频1区| 久草热在线视频| 激情五月影院| 色五月婷婷色五月婷婷色五月婷婷| 色色丁香| 美女天天艹人人爽| 五月天伊人av| 婷婷五月天激情综合| 99超级碰碰| 色呦呦在线| 久久久久婷婷| 在线播放成人网站| 天天爽天天爽| 99国产99| 天花AV无码| 精品香蕉99久久久久网站| 大香蕉久艹| 99爱视频在线观看| 免费视频无码| www.26uuu.com亚洲电影| 亚洲午夜AV| 超碰人人99| 久久密臀婷婷| 婷婷六月综合基地| 五月丁香少妇| 激情综合婷婷| 激情综合网五月天天| 色播婷婷大香蕉| 伊人婷婷色| 激情婷婷五月综合| 综合性爱网| 婷婷激情五月视频| 五月婷婷激情网| 丁香综合久久| 五月丁香久久久久| 天天日日夜夜爽| 色欲色天天香综合| 综合五月天亚洲婷婷| 99九九精品| 美女网黄| 日韩五月天婷婷| 亭亭丁香久久五月| 婷婷五月骚厕所| 日本性激情色播| 五月激情丁香| 影视av久久久噜噜噜噜噜三级| 99爱精品| 日本三级韩三级99久久| 九月色婷婷综合亚洲| 超碰人人摸AV| 色优久久| 色婷婷五月综合在线| 热热久久久久久久久| 婷婷丁香五月噜噜噜| 五月丁香AV、伊人业余、性色熟妇| 深爱激情九九五月天| 99热骚货| 欧美久久婷婷| 丁香五月开心七月| 狠狠综合网| 五月天婷婷綜合院| 爱的综合网| 亚洲综合狠狠艹| 久久精热| 天天日天天爽| 国产性爱一级| 精品综合五月| 九九视频这里只有精品| 97搞在线| 亚洲视频在线观看99| 丁香婷婷人妻综合网| 乱色色色| 夫妇交换刺激做爰| 伊人激情综合网| 99A级片| www.狠狠操.co m| 久久这里只有精品网| 女人天堂 AV| 成人精品在线| www久久久久| 九九激情网| 99热只有国产在线精品| 久久性爱视频网站| 激情av在线| 亚洲精品色色| 狠狠综合久久| 色情婷婷。| 色五月婷婷狠狠撸| 99玖玖免费视频| 五月婷婷深深爱| 色婷婷yy久| 香蕉综合在线| 夜夜撸日日操| 婷婷九月丁香中文| 色婷婷激情视频| 射区导航| 亚洲色图在线视频| 夜夜骑福利资源| 久久婷婷啪啪视频| 五月天丁香久久| 天天做天天双| 九九激情网| 伊人久热91网| site:feetmall.com| 99这里只有精品|v| 人妻激情综合| 五月天成人小说| 久久香蕉网| 99九九在线视频| 天天综合图片| 碰97 久| 久久只有这里精品免费| 五月婷婷片| 91色干| 丁香激激情网| 激情亚洲五月| 丁香五月天激情网| 五月婷婷先锋| 亚洲va欧洲va国产va不卡| 公的粗大挺进了我的密道| 人妻激情视频| 综合激情在线视频| 婷婷激情啪啪| 91九色国产熟女| 夜色爱爱亚洲| 天天插天天插| 超碰色婷婷| 日本操逼九九九九58日本操逼| 人人草人人舔| 婷婷久久五月天亚洲欧美国产日韩在线观看| 色欲天天综合| 欧美日韩91| 五月久久婷婷丁香| 亚洲另类在线观看| 久久久五月天| 亚洲色vA| 婷婷五月丁香色综合| 九九九九这里只有精品| 亚洲色图81p| 丁香五月天社区| 日本97人人| 狠狠五月天激情| 狠狠插.com| 婷婷五月天色综合| 涩九九九九| 丁香婷婷激情五月天无毒不卡蜜桃| 超级碰碰碰久久网站| 99精品视频免费在线播放| 激情综合色| 六月丁香婷婷视频综合在线观看| 极品少妇高潮啪啪AV无码| 色五月婷婷丁香婷婷| 亚洲成av人影院| 婷婷中文字幕版| 日逼AV影音先锋男人资源站| 色婷婷五月天激情在线观看| 97干97色| 超碰在线日夜| 六月婷婷久久| 五月婷在线| 亚洲精品无码一区二区| 成人免费va| 久久五月婷婷丁香| 久久99国产综合精品免费| 婷婷五月丁香激情色情| 丁香色影院| 操日视频| 丁香五月天五码婷婷| 波多婷婷久久| 亚洲第一第二网站| 久久精品只有这| 色色日本欧美| 午夜天堂一区人妻| 天天操中文字幕| 99re这里只有精品9| 大战熟女丰满人妻AV| 午夜色丁香| 国产1区2区3区| 五月丁香婷婷综合| 色五月综合在线| 亚洲成人免费在线| 五月婷九月| 激情九九六月激情免费视频| 天天干天天 亚洲| 日本三级片片| 香蕉97碰碰碰欧美| 丁香六月婷婷色XXXXX| 热99只有里视频| 日韩啪啪视频| www.99久久久久99| 免费三级黄色| 久久久久久人妻| 激情五月色播五月| 精品色色网| 综合激情肏逼网| 中文字幕在线日亚州9| 亚洲综合丁香五月天| 久久人妻久久久久| 久婷| 色婷婷88| 综合九九中文字幕| 97涩婷婷婷婷基地| 屁股翘好撅高迎合跪趴| 色五月婷婷网| 亚洲色色色| 激情狠狠丁香月| 大香蕉久久久久| 欧美日本国产| av婷婷六月丁香社区在线观看| 99色热视频| 久久九九在线视频| 五月永久激情| 国产色婷婷亚洲| 99综合一区| 大战熟女丰满人妻AV| 天堂中文国产| 99九九热在线观看| 激情久久久久久| 亚洲99热| 99热.com| 日婷婷久久开心| 日韩激情人伦人| 激情五月天婷婷激情| 激情无码网| 亚洲色区17| 日本精品人妻无码77777| 综合啪啪| 99这里只有精品|v| 久久人妻视频| 五月色综合| 色五月播五月| 婷婷五月天综合网| 国外亚洲成AV人片在线观看| 婷婷色色亚洲| 五六月婷婷久久| 免费超碰在线观看| 婷婷亚州综合| 婷婷六月天天| 婷婷色五月激情| 丁香大香蕉| 色婷婷在线播放| 熟女激情网| 色99自拍| 天天天操天天天爰| 色色色色色爱| 色综合另类| 五月天天爽| 天天日夜夜曹| 六月婷婷中文字幕| 色五月天激情| 99网| 激情久久综合网| 婷婷色情五月| 天天插天天插天天操| 五月总合激情网| www.天天干.com| 欧美婷婷六月丁香综合色连续高潮抽搐| 永久思思热在线| 7超碰自拍| 这里只有精品视频视频在线观看| 色情五月天se| 五月婷婷五月天| 久久视频婷婷| 国产精品一区在线观看你懂的| 北京熟妇搡BBBB搡BBBB| 久热在线观看视频9| 99热在线爱| 色五月婷婷综合在线| 成人午夜无码视频| 激情五月伊人婷婷| 亚洲 五月 婷婷 成人| 婷婷五月婷| 五月丁香影视| 久久精彩免费视频| 色色色在线观看| 玖玖在线视频| 丁香五月电影| 欧美交换配乱吟粗大25P| 婷婷五月丁香综合亚洲| 九九综合九九| 婷婷五月天香蕉| 色在线99| 久久久久久久11111111111| 热久久婷婷| 成人电影一区| 婷婷五月丁香六月| 成人 在线观看国产| 99ri在线播放| 婷婷丁香色情| 九九碰九九爱97| 中文字幕av网站| aaaaa不卡| 中文在线视频久1| 丁香九月激情| 婷婷五月丁香色播| 伊人婷婷色激情丁香| 99热8| 亚洲欧美婷婷五月色综合| 日韩熟女啪啪视频| 六月婷婷激情| 五月婷婷开心网| 黄桃AV无码免费一区二区三区| 国产综合丁香五月天| 熟女色专区| 婷婷久久色| 美国少妇性做爰| 97极品在线| 久久这里只有精品16| 四虎成人精品永久免费AV九九| 91男同视频| 婷婷激情丁香五月婷婷激情丁香五月婷婷 | 五月丁香六月婷综合成人综合| 五月激情综合网| 人妻熟女一区二区AV| av在线播放网址| 五月天久久丁香| 丁香五月六月| 日韩啪啪视频| 99热都是精品| 五月丁香好婷婷A片网| WWW.桔色成人.COM入口| 婷婷五月色播| 激情五婷精品网在线观看网址| 日日操夜夜爽| 另类国产区| www色综合| 中文字幕在线日亚洲9| 婷婷伊人綜合中文| 婷婷色欧美激情| 综合色影| 日韩一级A片黄色| 丁香桃色网| 色色五月天婷婷| 91色久| 欧美三日本三级少妇三99| 毛片蕉地一二| 五月综合视频| 91操网| 99狠狠| 色色色色区| 激情五月小说婷婷| 99ri在线播放| 99热99在线| 天天综合网91| 综合激情站| 色伊人婷婷| 97影院一级片| 久久久久妻| 99啪啪| 日本三级中国三级99人妇网站| 五月婷婷偷拍| 丁香五月网站| 日韩国产在线精品| 开心五月网| 五月丁香最新| 激情综合无码| 婷婷伊人激情婷婷| 久久久久九九九九视屏小说88| 五月丁香 啪啪啪| 99综合97| 久久婷婷啪啪视频| 思思热视频| 亚洲激情高潮| 久久影视婷婷五月| 香蕉久久国产AV一区二区| 91成人视频| 能看的av| 色99网站| 高潮毛片遮挡费高一百度| 偷偷与邻居做爰完整视频| 99爱免费视频在线观看| 99色五月| 搡BBBB搡BBB搡五十| 亚洲综合婷婷六月丁香五月| 欧美精品啪啪| 欧美激情综合五月色丁香| 久久黄色免费视频| www.一起草av| 五月婷婷丁香六月| 五月丁香在线看| 97视频91| 五月激情四射网站| 亚洲综合五月天婷婷丁香| 精热在线综合网| 久久受www免费人成| 色亭亭五月天丁香综合AV - 百度 - 百度| 色综合丁香| 91性交在线播放| WWW.17C亚洲精品| 久久99网站| 婷婷99综合| 色99网| 开心六月丁香五月婷婷| 五月丁香综合网| 五月天激情小说| 99愛国产| 亚洲色婷婷激情| 人人妻人人澡人人爽| 日本五月婷婷| 精品久久艹| 色五月xxx| WWW.久久99| 无码色| 色天五月天在线观看视频| 99热99网| 亚洲小电影在线观看黄999| 99国产精品久久久久久久久久久| 99色综合网| 激情五月丁香六月婷婷| www.av视频xx999.com| 超碰97色| 婷婷六月丁香五月图区| 日本三级日本三级99| 五月丁香六月婷婷激情视频在线观看免费| 五月天激情网址| www.射伊蕉婷婷| 日本色99网站| 丁香激情网| 大香蕉五月婷婷| 五月天五月天激情网| 丁香五月自拍| 丁香五月婷婷狠狠色| 五月天丁香色色| 婷婷社区五月天| 久久看婷婷| 九九爱激情| 夜夜操夜夜姧| 色亚洲视频| 日韩成人综合网| 人人摸人人干| 99精品成人无码A片观看金桔| 丁香婷婷五月综合色情| ww久久| 日本九婷婷| 婷婷操婷婷干婷婷射| 色婷婷深爱五月| 在线观看av网站| 婷婷丁香五月天熟女丝袜| 91狼友视频在线观看| 日本不卡高字幕在线2019| 大香蕉手机视频| 色激情五月| 色播播五月| 亚洲色爱综合| 五月婷婷六月天| 色五月激情五月| 天天综合中文| 91色逼| 婷婷操久久| 91日视频| 91丨九色丨熟女丰满| 无码任你操| 91精品久久久久久综合五月天| 色六月视频| 青青草视频福利| 久久这里99| 欧美综合激情五月| 色婷婷www| 五月婷婷婷| 五月婷婷丁香五月婷婷丁香| 亚洲综合久| 五月天.com| 日韩成人网址| 久久5 9视频免费观看| 99精品视频免费观看近期发布| www.色色色com| 另类婷婷五月天啪帕帕| 丁香五月激情综合婷综| 综合色色网| 99在线观看视频免费| 婷婷第六色| 婷婷五月激情片| 五月丁香花开综合网| 狠婷婷五月| 天天色视频| www.99久| 色五月婷婷7777| 久久久久九九九九视屏小说88| 伊人狠狠色婷婷综合丁香一区| 激情四射网| 五月丁香婷婷在线综合蜜桃| 激情综合网 激情五月天| 狠狠色噜噜狠狠| 五月婷婷啪啪啪| 婷婷五月影院| 变天就操逼婷婷五月| 欧美日韩成人在线网站| 亚洲激情淫网| 天天色综合网1| 丁香六月婷| 色五月激情网| 丁香婷婷五月人体| 思思99热在线| 九九热婷婷| 能看的av| 91色逼| 伊人五月久久| 丁香婷婷色色| 天天肏视奸| 超碰免费成人| 色五月婷婷很很操| 五月丁香六月婷| 亚洲啪啪精品| 天天天天天操| 色婷婷www| 久久婷婷五月天丁香| 99久久久免费| 99热综合| 国产精产国品一二三在观看| 婷婷五月天黄色网址| 天天摸天天爽| 五月婷久久| YW无码| 久久久中文| 欧美国产一区二区三区| 图片区 小说区 区 亚洲五月| 狠狠九九婷婷韩| 色欲丁香久久| 丁香五月天激情视频| WWW.久久久久久久久久久久久| 丁香香五月激情免费视频| 大香蕉欧美在线| 美女久久婷婷| 另类婷婷丁香| 丁香五月成人社区| 久久久久久9| 五月婷婷丁香瑟瑟视频| 日本操B视频| 综合伊人久久| 五月激情婷婷播播开心| 婷婷丁香六月天激情四射网| 一本道综合网| 99精品偷自拍| 激情综合4月| www.99热视频| 丁香五月天激情四射网络不好| 亚洲久久婷婷丁香五月天| 337p大胆噜噜噜噜噜91Av| 99re免费精品视频| 六月婷婷中文字幕| 99精品女人天堂| 婷婷五月深深爱| 九九九九操逼| 中文不卡一二三区| 国产古装妇女野外A片 | 色婷激情网| 婷婷中文字幕| 色婷婷色九月| 91九色国产在线| 激情综合网色五月| 天堂中文国产| 五月丁香婷婷色色| 色99网站| 天天日天天干天天爱| 天天骑天天操| 99热 在线观看| www.色婷婷| 丁香色情五月天| 五月天偷拍| 久久99激情| 精品人妻伦九区久久AAA片| 婷婷色色狠狠| 国产露脸150部国语对白| 五月婷婷综合色拍| 久久久9久| 丁香五月婷婷日本| 超碰91av| 精品亚洲国产成人A片在线鸭王| 做爱夜夜干天天操| 婷婷综合中文字幕| 色五月在线观看| 色色色色色色色色色色色色色97| www.色99| oumeisesewang| 精品夜夜澡人妻无码AV| 色人妻五月| 久草丁香婷婷五月天婷| 久久久婷婷| 99超在线| 五月婷婷9| 婷婷六月啪啪| 亚洲看av的网站| 色婷婷色综合| 99久热这里只有精品| 免费看欧美成人A片无码| se99在线| 九九人人自拍| 九九AV| 色婷婷色婷婷五月| 久久黄A片| 被强行糟蹋的女人A片| 伊人久久五月天综合| 狠狠99| 色色色999| 懂色AⅤ| 99热主页日本| 丁香五月婷中字在线| 六月婷婷五月丁香| 亚洲1区| 五月天婷婷丁香成人网| 色欲天天综合| 婷婷五月天欧美图片在线播放电驴| 中文字幕网站在线观看| 亚洲色五月| 能直接看的av网站| 色黑鬼导航| 97人妻碰碰碰久久久久-最近国语高清| 婷婷社区五月天| 天天插天天插天天日| 九月婷婷在线观看| 天天日天天爽| 欧美97色| 五月丁香婷婷成人网| 国产VA播放| 久久久久五月丁香| 香蕉久久av一区二区三区| 亚洲欧洲午夜成人精品av| 亚洲综合色丁香婷婷六月| 久久与婷婷| 91精品刘玥| 丁香五月激情五月| www.久久爱.com| 色人妻五月| 久久这里在精品视频| 黑人无码一区| 亚洲亚洲人成综合网络| 色啪综合| 日韩在线观看亚洲| 激情五婷网| 五月丁香在线国产| 九九综合精品| 中文字幕在线免费观看视频| www.久久婷婷| 夜色爱爱亚洲| 久cao香蕉影院| 97福利视频| 任你爽免费视频| 五月天久久91| 日韩AV大全| 一个色的综合| 思思久ren热| 狠狠搞五月天| 亚洲精久久| 五月停停999| 玖玖婷婷色| 婷婷六月天| 久久色大香蕉| 色综合久久久无码中文字幕999| 激情五月天小说网| 六月色婷婷| 丁香五月天色婷婷| 久久久婷婷| 超碰亚洲天堂| 亚洲色五月婷婷| 四虎成人精品永久免费AV九九| 激情丁香五月婷婷| EEUSS鲁片一区二区三区| 六月丁香综合| 六月色婷婷| 五月天婷婷AV| 人妻人人操| 99热婷婷| 色狠狠色| 中文字幕视频色婷婷| 国产在线网| 丁香五月激情啪啪综合| 国产亚洲成人综合| 婷婷五月色惰| 天天肏夜夜肏| 国产xxxxx在线观看| 日韩一区二区在线播放| 五月天开心色情网| 99日韩网站| 色五月丁香六月欧美综合| 激情丁香五月天图片| 色情婷婷五月天| 综合激情在线| AV大香蕉| 婷婷丁香久久网| 久久图色4| 成人网站在线观看视频| 这里只精品| 五月丁香激情婷婷综合| 99久久网站| 99精品自拍| 97精品人人A片免费看| 亚洲欧美综合7777色亭亭| 久久婷婷五| 亚洲综合1024| 亚洲A片成人无码久久精品青桔 | 97在线日韩| 射区导航| 亲子乱AV一区二区三区下载| 香蕉久久av一区二区三区| 色婷婷第四色| 五月丁香激情综合网| 狠狠综合| 激情五月四色| 色色色成人网| 丁香五月玖玖| 碰碰碰91| 亚洲色婷婷激情| 五月激情婷婷丁香| 久久激情网| 久久国产AV| 欧美黑人大吊| 思思精品视频| 青青久在线视频免费观看| 99啪在线| 一本久久亚洲五月婷婷| 99热日| 一本色道久久88加勒比| 好看的国产精品| 99热这里只有的精品视 | 中文字幕丰满孑伦无码专区| 久久伦乱| 思思热国产在线| 五月婷婷色| AV六月丁香| 亚洲 精品 综合 精品| 青青草五月天| 亚洲综合网在线| 99色婷婷视频| 天天玩夜夜操| 97超碰,人人舔,人人操,人人摸 | 精品无码色欲AV| 亚洲六月色婷婷| 中文AⅤ大全| 九月婷婷综合八月丁香在线观看| 精品在线网站| 色婷婷亚洲综合av| 夜夜骑日日夜夜| 久久综合五月| 成人在线综合| 六月丁香五月天| 久久久一级AAA| 天天综合色丁香| 超碰人人操在线| 色一情一乱一乱一区9| site:feetmall.com| 婷婷综合五月天| 4399成人黄A片| 丁香五月色网| 丁香五月婷婷亚洲另类| 婷婷亚洲激情在线观看视频| 99热最新网址| 五月婷婷三级| 五月丁香六月激情欧美综合| 丁香五月大香蕉在线99| 激情五月婷婷伊人| 青草青草视频2免费观看| 人人爽欧美婷婷久久久五月丁香| 精品成人在线观看| 丁香五月天狠狠操| 99精彩视频| 婷婷成人AV| 激情爱爱网站| 五月丁香色婷婷色| 五月综亚洲| 日韩在线视频网站| 538在线精品| 五月丁香影院| 美女美女美女三级色天天天天天| 亚洲精品久久久久AV无码| 91免费试看| 99视频这里只有久久精品| 99精品综合在线| 色婷婷成人做爰A片免费看网站| 日韩在线视频中文字幕| 美欧成人视频| 台湾无码A片一区二区| 亚洲综合视频在线| 思思9久久| 久久99久久99精品免观看软件 | 少妇口诉沐足视频播放器网址| 国产毛片精品一区二区色欲黄A片 极品人妻VIDEOSSS人妻 | 婷婷之六月丁香| 中国女人做爰A片| 五月四色婷婷| 亚洲欧洲美女在线观| 婷婷丁香人妻天天| 伊人久热91| 99在线小视频| 九月综合| 五月天色综合| 五月婷婷免费| 好大好粗嗯啊-一级黄色大片免费观看-成人AV| www,99热| 婷婷碰碰| 中文字幕性爱视频| 影音先锋一区| 夜夜操天天干| 国产 A片 自拍| 丁香六月天婷婷色| www.henhengan| 婷婷丁香九月| 激情五月天丁香| 丁香5月婷婷| 亚洲熟女乱色综合亚洲网站| 欧美成人A片AAA片在线播放| 五月色欧洲| 五月丁香婷婷99| 99天堂网| 米奇影视五月天| 国产视频福利| 久热免费视频| 婷婷五月天免费| 14色综合婷婷| 精品少妇人妻AV无码专区偷人| 99久久久| AV电影在线播放| 91久久日日| 欧美色97| 久久97| 丁香五月狠狠在线观看| 色丁香五月| 天天干天天日天天插| 一级性感毛片| 婷婷五月影院| 婷婷九月亚洲| 影音先锋人妻出差| 97人人草| 視频福利乱色| 国精产品一区一区三区免费视频 | 九月激情网| 婷婷丁香大香蕉| 亚洲六月婷婷| 五月丁香婷婷深深爱| 情五月亚洲婷婷| 久久精品婷婷五月丁香| 色五月综合| 五月天 婷 欧美亚洲| 五月天开心色情网| 99操视频| 在线视频激情网站| 久久婷婷午夜| 婷婷五月丁香91| 人人草人人视| 午夜丁香综合婷婷| 丁香五月大香蕉在线99| 99re8这里只有精品99re8热视频| 婷婷五月天久久久| 五月综合亚洲| 天天做天天爱天天爽夜夜揉| 五月丁香色婷基地综合久久| 久久大大香| 99色视频| 五月丁香好婷婷A片网| 六月丁香影院| 俺去也在线官网| 无码一区二区日韩| 五月天激情四射| 五夜丁香| 九九综合图片网| 精品一区久热| 中文字幕日产A片在线看| 99无码视频| 热思思| 日日激情网| 国产欧美婷婷五月| 五月丁香综合激情在线观看| 美女黄频aⅴ视频| 狠狠色婷婷7777久综合| 一区二区你懂的| 亚洲激情四射色| 熟妇内谢69XXXXXA片| 激情综合五月天| 五月婷婷香| 色999亚洲人成色| 亚洲第一成人无码A片| 欧美激情综合色综合啪啪五月| 久久婷婷亚洲无码一起| 欧美丁香五月| 熟女啪啪视频| 深爱五月天 开心网| 艹色18p| 亚韩精品视频1区| 人与禽A片啪啪| 日本熟妇乱妇熟色A片蜜桃| 99精品无码| 免费做A爰片77777| 欧美日韩中文国产一区发布| 99噜噜噜在线播放| 蜜桃成语时李时珍 免费| 五月天激情国产综合婷婷婷 | 五月天激情综合首页| 久久五月丁香婷婷| 婷婷色五月婷婷姐妹| 激情综合青草| 色婷婷色久综| 国产高清精品色| 激情五月六月婷婷| 大香蕉久久婷婷精品综合| 26uuu欧美| 婷婷热婷婷色| 婷婷五月天com| 婷婷九月激情| 九九热这里只有国产精品| 婷激情五月| 色婷婷久久综合中文久久一本| 色婷婷六月天| 开心激情综合| 激情九月婷婷九月| 大香蕉伊人爱在线| 无码一区二区三区四区五区| 美女久久天堂| 热久久色| 思思热国产视频| 无码人妻一区二区三区免费九色| 婷婷五月丁香色综合| 婷婷丁香人妻天天爽| 丁香六月婷婷色XXXX| 99久久精彩视频| WWW色综合| 婷婷操婷婷干婷婷射| 九九综合九九| 欧美叉叉叉BBB网站| 丁香花综合永久入口| 97干资源在线观看| 99热都是精品| 狠狠干综合| www.五月天。com| 国内外色色色色色成人视频| 久久99网| 国产伦亲子伦亲子视频观看| 天天色天天操天天射| 超碰色女| 9999热精品在线免费播放| 色婷婷五月天视频在线| 青青草婷婷综合五月| 五月婷婷色| 国产成人精品亚洲线观看| 伊人久热91| 凹凸7777操操操| 色青青视频| 久久色天堂| 91精品久久久久久久久久| 六月婷欧美| 精品无码人妻一区| 久久99激情| 婷婷色情 | 99自拍视频在线观看| 99热成人在线观看| 久久精彩视频| 婷婷丁香五月激情密臀av| 最新激情五月天| 丁香六月亚洲综合| 久久丁香五月婷婷| 亚洲电影中文字幕| 97碰碰在线看视频免费| 伊人丁香花综合影院| 色婷五月| 涩 五月 婷婷 狠狠| 无码中文一区二区三区| 99ri在线观看视频| 五月停停大香蕉| 深爱五月月天| 婷婷综合视频| 五月天开心色色网| 丁香婷婷五月人体| 天天综合网~91| 色爆五月| 色色网站日本91| 99五月丁香丁| 丁香五月六月婷婷综合| 成人婷婷色综合| 天天搞夜夜叫| 婷婷五月天久久久| 丁香五月婷婷www..com| 久久这里99| 能看的av| 九月婷婷综合八月丁香在线观看| 激情www| 婷婷爱爱蜜臀天天操| 婷婷的色色五月天| 大天天伊人| 天天爽免费视频| 婷婷色色色| 九九精品在线观看视频6| 亚洲精品久久久久久久久久飞鱼| 玖热精品综合视频| 五月停亭六月,六月停亭的英语| 九九精品系列| 黄色激情五月天| 色色五月丁香婷婷综合| 99视频网| 婷婷色基地在线看| AVDV久久| 婷婷五月六月丁香| 婷婷六月综合基地| 91网站黄| 99热国产| 亚洲激情综合色站| 国产乱人偷精品人妻A片| 色欲婷婷夜夜| 风流少妇A片一区二区蜜桃| 日日操夜夜爽天天天| 噼里啪啦在线观看免费完整版视频 | 思思热AV| 久久 无毛。| 婷婷伊人久久| 97自拍视频在线| 五月丁香婷婷综合网| 99 re视频一区| 色色色色色色网站| 开心婷婷五月天电影院| 强辱丰满人妻HD中文字幕| 日本www免费九九| 色五月首页| 丁香五月婷婷亚洲激情四射| 亚洲熟女色| 天天做天天爱天天日| 欧亚成人A片一区二区| 天天干、天天日日| 丁香五月电影院在线观看| 激情综合在线观看| 激情五月天综合网站网站网站| 久久AV无码精品人妻系列试探| 26uuu91| 丁香五月婷婷高清| 婷婷色片| 99天堂网| 无码成人AAAAA毛片AI换脸| 色色网站免费| 99自拍视频在线| 少妇人妻偷人精品无码视频新浪| 日韩在线aaa| 九九色婷婷| 亚洲成av人影院| 色婷婷五月天激情在线观看| 婷婷九月色| 天天色综网| 亚洲AV网站在线观看| 欧美激情Va| 丁香色五月AV在线| 欧美在线干| 91精品综合久久久久久五月丁香 | 亚卅毛片| 亚洲A片成人无码久久精品青桔| 日日日日操| 日韩成人免费电影| 久草婷婷视频| 99久久久| 婷婷五月激情天| 五月婷婷综合热| 97sese婷婷| 婷婷五月天激情小说| 色情五月停停丁香| 色噜噜狠狠色综合日日| 影音先锋男士资源网一区| 在线中文av| 五月天激情无码高清| 色综合网址| 91日婷婷在线| 婷婷五月天激情文学| 婷婷深爱五月丁香| 欧美久久五月婷婷| 激情综合另类| 欧洲色色| 色玖玖爱| 五月天婷婷青青草| 9l视频自拍九色9l视频自拍九色9l社区| 色婷插| 1024人妻| 日韩欧美成人片| 丁香五月婷婷激情蜜桃| 丁香五月婷婷六月婷| 久久超视频| 亚洲国产成人AV在线 | 人妻自慰高清合集| 五月婷婷伦理| 人伦30P| 丁J香六月首页| 国产毛片精品一区二区色欲黄A片| 欧美99热| 天天插天天日| 亚洲婷婷激情五月天| 美女婷婷六月色| 欧美内射AA| 亚洲旡码| 日本99色| 色色丁香五月天社区| 婷婷不卡基地| 熟妇人妻中文字幕无码老熟妇| 超碰人人操人人干| 久99热在线观看| 亚洲精品99| 九九精品热| 99热99热不卡| 亚洲噜色| 艹| 天天舔天天插天天干| 日日干夜夜撸夜夜骑| 激情综合综合综合| 玖玖色综合| 玖玖在线视频福利| 国产99热| 五月丁香婷草| 丁香五月婷婷大香蕉| 五月天婷婷AV| 五月激情六月丁香| jizzdr| 色99网| 思思热在线观看| 五月丁香婷中文| 五月天婷婷深深爱| 国产色五月婷婷| 丁香五月天在线| 色色丁香激情五月| 久热这里只有精品视频免费观看| 五月天激情视频五月天| 九九热99精品在线| 五月激情综合深爱| 狠狠草狠狠草| 五月天丁香婷婷社区| 久色| 99视频久久| 五月天婷婷成人网| 五月天成人在线视频网站| 五月丁香啪啪啪| 香蕉久操| 婷婷久久婷婷色五月| 五月丁香偷拍| 日本高清久| 婷婷五月在线免费| 激情无码五月天| www.狠狠干com| 丁香五月亚综合图片| 婷婷五月丁香色综合| 亚洲六月色婷婷| 97五月天| 色婷婷狠狠禁18久久| 婷婷性爱五月天丁香网| 国产综合久久久777777| 日本美女上人| 色六月天天激情综合网| 婷婷伊人激情婷婷| 秋霞三及片| 婷婷操超碰| 日韩色五月| 久草五月| 久久五月天 91| 97香蕉久久超级碰碰高清版| 国产精品色色色色| 91丨九色丨东北熟女| 色婷婷中文字母五月丁香| 婷婷永久在线| 婷婷五月天伦理| www激情五月天| 天天综合 99久久婷婷| 特黄三级片| 99久久人妻精品无码二区| 开心五月婷婷综合在线精品素人| 亚洲区视频| 青草视频在线蜜臀| 五月丁香影视| 丁香久久| 日本英国美国欧美亚洲国产精亚洲日韩精品在线观看 | 激情网五夜婷婷| 开心激情网五月| 婷婷色网站| 综合色图婷婷| 激情综合网五月丁香| 亚洲AAA| 婷婷五月激情天| 狠狠干婷婷| 丁香五月天社区婷婷| 丁香五月天导航| 综合五月天婷婷色| 丁香五月六月婷婷怡红院| 在线婷婷| 亚洲AV日韩在线观看| 亚洲婷婷丁香五月| 久热这里只有精品3| 99热精品无码| 偷偷与邻居做爰完整视频| 激情图片婷婷| 日韩六十路91性交电影| 久久99综合网| 伊人九九68| 26UUU成人网| 五月丁香婷婷AV| 无码一区精品一区视频| 色久九| 综合色播| 天天成人五月天| 色五月超碰| 日本婷婷色| 婷婷五月天va| 婷婷久久综| 色色色1网址| 五月五丁香婷婷| 婷婷激情六月| 丁香五月停停基地| 五月丁香另类网| 亚洲久热| 成人短视频在线| 婷婷五月天欧美| 伊人久久大香线蕉精品| 丁香五月天信号| 91狠狠色| 色综合女人99| 日日干综合| 久久九九国产精品怡红院| 五月天婷婷香蕉狠狠超碰综合| 狠狠狠夜夜夜| 丁香网站| 久久综合激情五月天| www色婷婷| 久久久婷婷五月亚洲97号色| 五月丁香色婷| 开心五月婷婷| 国产亚洲精品人人| 婷婷丁香五月激情| 色五月婷婷影院| 久久丁香五月天| 欧美性交一区二区三区| 第四色首页| 久久99大| 337午夜福利| 人人操人人妻| 99热这里只有在线| 国产精品久久久久久妇女6080| 久热大香蕉| 婷婷综合五月天| 五月天丁香网站| 婷婷丁香五月麻豆| www.五月婷婷.com| 亚洲成人av在线| 亚洲午夜电影| 日韩成人网址| 日本三级日本三级三级人妇四虎| 激情五月色婷婷| www.色五月.com| 丁香成人五月天| 天天草天天爱| 成人无码髙潮喷水A片|