亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

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)委員會認為你再組合一下就能得到 split不需要單獨提供。第二split 本身存在太多變體。返回值怎么定是vectorstring還是vectorstring_view分隔符是單個字符還是字符串要不要支持多個分隔符空字符串是保留還是丟棄首尾分隔符怎么處理這些語義沒有統(tǒng)一答案標(biāo)準(zhǔn)庫一旦提供某一種就會限制其他用法的發(fā)揮。第三歷史包袱。C 標(biāo)準(zhǔ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)容。空串策略也很關(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)??梢栽谘h(huán)前tokens.reserve(...)預(yù)留容量也可以換成string_view版本進一步降低拷貝。2.3 思路三正則表達式統(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默認值都設(shè)置成符合直覺的狀態(tài)keepEmpty false表示默認丟棄空串trim true表示默認修剪首尾空白這樣配置解析場景里最常見的寫法可以保持干凈。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)有幾個細節(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)作負數(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ù)分隔符的處理細節(jié)關(guān)于空子串的取舍我提一個容易忽略的細節(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 性能細節(jié)reserve、string_view 與內(nèi)存分配的博弈實現(xiàn)里的另一個關(guān)鍵點是預(yù)分配。如果提前知道切分數(shù)量可以用tokens.reserve(count 1)減少 vector 擴容時的拷貝。但很多場景下無法預(yù)知切分數(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ù)分配因為多字符分隔符的切分數(shù)量通常沒那么大。如果追求極致性能可以寫一個split的string_view版本返回vectorstring_view。它完全不分配新的字符串內(nèi)存省去所有深拷貝代價是調(diào)用方必須保證源字符串的生命周期長于結(jié)果視圖。這個約束在函數(shù)內(nèi)部無法強制檢查只能靠調(diào)用約定和代碼注釋約束所以我通常只在性能敏感模塊里提供string_view版的私有工具函數(shù)不輕易放進公共接口。公共接口保持vectorstring最穩(wěn)妥。4. 踩坑實錄與性能實測實戰(zhàn)里最容易翻車的細節(jié)4.1 常見問題速查表我在各種評審和代碼 review 里見過無數(shù)次同樣的 split 踩坑這里整理成一個速查表直接對著查就行。問題現(xiàn)象根因解決方案分割結(jié)果丟失最后一個空字段getline 方案遇到末尾分隔符不產(chǎn)生輸出改用 findsubstr或顯式檢查尾串中文等非 ASCII 字符出現(xiàn)亂碼按字節(jié)截斷substr按字節(jié)數(shù)切割確認需要的是字節(jié)切分還是 UTF-8 碼點切分前者用 substr 沒問題后者要引入字符解碼分隔符是\\0或空字符串時空指針崩潰對delim.empty()未做防御開頭判斷delim.empty()時返回整個字符串使用std::isspace時傳入負值導(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策略不要依賴默認值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)代碼里的防御性細節(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}而不是進入死循環(huán)。如果不加這個判斷find(delim, start)傳入空字符串時會返回start然后start pos 0永遠停留在原地成為死循環(huán)這是個特別隱蔽的 bug。第三個防御點是分隔符長度大于源字符串長度的問題。比如split(abc, abcdef)find返回npos循環(huá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存進結(jié)果結(jié)構(gòu)。命令行參數(shù)拆分空間分隔和引號處理規(guī)則比較特殊istringstream能輕松處理簡單的空白分隔但如果參數(shù)里帶引號和轉(zhuǎn)義建議直接引入一個成熟的全功能參數(shù)解析庫不要重新發(fā)明輪子省下來維護轉(zhuǎn)義規(guī)則的時間能做好多別的事。5.2 一個可以直接抄進項目的完整工具頭文件為了讓你少做重復(fù)工作我把上面講的精華濃縮成一個單文件工具頭支持單字符、多字符、多分隔符拆分支持修剪和空串策略按 LGPL 類似寬松許可放出來你自己接進代碼庫就可以用// 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)本身更考驗功力。千萬不能圖省事把所有行為都藏在一個“智能”的默認值里否則不同調(diào)用方會互相踩對方的語義預(yù)期。好的 split 應(yīng)該把決定權(quán)交給調(diào)用者用參數(shù)顯式表達需求。還有一個小技巧如果你的項目有規(guī)約要求禁止使用異常那所有返回 vector 的 split 函數(shù)都應(yīng)確保沒有拋出異常的機會。std::string的默認分配器在內(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少妇| 色偷偷色偷偷欧美日韩| 91色图片| av麻豆啪啪| 精品一区二区3区| 国产18精品亚洲精品| 三男一女不戴套的A片| 国产AB视频| 亚洲男人天堂2012| 欧美大香蕉97| 91 丝袜在线| 亚洲成人色情五月天丁香花| 中文字幕在线观看第二页| 五月婷婷综合网| 日本性爱不卡视频| 高潮内射在线| 女人妻一区| 小草精彩毛片| 熟女丰满人妻一区| AV天天在线观看| 国产一区96在线| 亚洲成av人片色午夜乱码| 日本Xx性爱| av在线一区二区三区| av网站国产主播在线| 中文字幕在线免费观看 | 国产97色在线| 韩国久久97| 91人妻爽爽人人做人人澡| 五月天综合网| 天天综合网久久ww| 欧美亚州综合图片| 久久精品一区二区三区蜜桃臀| 1区2区3区中文字幕日韩| 97 视频在线| 91色图片| 超碰欧美97资源| 九九超碰综合网| 美女爽爽爽刺痛洞洞| 九九亚洲色在线观看| 视频二区熟女人妻| 五十路熟女人妻一区二区三区四区五| 国产性爱在线视频一区二区| 激情第四色| 欧美极品女人的天堂| 精品熟女一区=区三区| 91精品成人www| 一区,二区,三区网站| www.高清无码诱惑一区.com| 校园春色亚洲色图| 欧美精品成人一区二区在线观看 | 大香蕉色十月| 97色妞| 另类专区加勒比| 亚洲午夜精品久久久中文影院| 久久久久久久唑| 人人妻人人狠人人| 中文字幕精品三级久久久| 日日噜噜夜夜久久亚洲一区二区 | 精品网站99999| 久久女人视频| 夜夜免费视频| 免费看黄片现成| 一区二区三区亚洲| 丰满人妻av一区二区三区 | 亚洲熟妇综合久久久久久| 日本二区不卡| a片 xxxx受爽视频| 人人干黄色| 中文字幕jul-617人妻熟女| 亚洲 日本 一 二 三| 一本正道久久熟女| 欧美色图20P| 国产粉嫩蜜臀av一区二区三区| 免费人成在线观看网站品爱网| 国语av最新自产拍在线观看| 99re这里只有精品3| 婷婷九月丁香| 国内毛片无遮挡国产| 综合色啪| 9 9无尺码天堂网| 久久久新亚洲AV| 久久国内| 大香蕉欧美国产日韩高潮| 91天天美女| 探花视频免费观看国产专区| 久久啊哟| 精品日韩人妻视频| 在线啊啊啊啊| 啊啊啊啊操死我| 国语精品内射在线观看| 人人综合| 久久性生大片免费观看性| 五月婷久久| 91欧美综合在线| 伊人网免费视频| 丁香五月性| 成人欧美日超碰| 肏逼福利网站| 精品国产乱码久久久久久影片| 青青草原av| 午夜电影在线观看无码专区| 超碰97在线色男人??| 亚洲国产尤物yw在线观看| 中文字幕一区二区三区蜜臀| 日韩精品一区二区高清| 91 丝袜在线| 亚州熟女乱伦| 宗合情欲网| 97AV在线观看| 亚洲欧美国产va在线| 久久中文字幕一区不卡| 超碰碰激情97+久| 一级二级三级黑人无码| 91色伦| 操逼操逼逼操操逼91 | 国产精品一级特黄aaa大片在线观看| 欧美图片偷拍| 日韩成人性日韩成人性爱视频在线免费观看| 丝袜大香蕉| 欧美啪啪啪91| 免费农村成人少妇人妻Aa一区二区视频 | 麻豆一区在线| 美中日韩无码| 成人性爱视频在线看| 大香蕉一人在线| 美国精品国产精品| 青青草久久在线| 欧美三级中文字幕hd| 欧美综合 站| 91爆操视频| 伊人嫩草| 96久久科窝| 日日操免费视频| 欧美在线大香蕉| 干日本人少妇午夜寂寞影院| 久久宗合97| 五月天婷婷激情| 日本视频在线中文字幕| 日韩99神马视频播放| 天天日天天搞天天干| 伊人aaa| 乱伦图av| 人妻少妇精品视频一区二区三区| 密臀在线免费观看| 嫖老熟女A片一二三区| av2014 日韩在线中文字幕| 九色97| 午夜一级免费毛片| 欧美一级A一级a爱片久久| 中文字幕55555| 亚欧成人综合影院| 91色狼| ai欧美亚洲小说| 九九香蕉网| 国产精品不卡一区二区三区av| 亚洲AV无码久久精品蜜桃小说| 国产一级作爱毛片| 成人一二| 啊啊啊慢点| 亚洲av总站| 日韩欧美字幕亚洲一区二区| 久久双插| 少妇久久久| 美女91av| 韩国轻伦国内自拍一区| 欧美刺激色黄片免费看| 国产高清在线观看欧美| 97超碰超碰| 欧美91久久久久| AV天堂电影网| 精品夜夜澡人妻无码| 欧美亚洲日本视频久久久| 91综合在线| 蜜区区视频79| 少好三P| 日日黄色三级网站| 国产熟女精品区| 日韩伦理久 久久 清纯| 99亚洲天堂| 久操com| 免费a v| 96超碰网| 日韩精品资源| 国产中文字幕在线观看| 精品成人女人久久| 91欧美丨精品丨入口| 999日韩中文精品观看视频。| 性做久久久久久免费观看软件 | 大香蕉综合| 91粉芽高清在线一区二区| 8050午夜少妇无码| 精品性爱一二三区| 日本 欧美 亚中文字幕| 国产AV中文| 免费国产| 大逼色网站| 人妻丰满熟妇av无码区蜜桃| 嗯~啊~快点 死我视频免费看网站| 射欧美综合| 四虎AV无码| 91人妻丝袜无码| 东京太热久久久| 日韩偷拍色图| 人妻少妇三级| 亚洲熟女偷拍在线观看| 33044男人的天堂深夜备| 久久影视二区三区行押| 欧美另类天堂| 青娱乐淫乱1314| 96精品久久久久久久久久| 啊啊啊啊啊啊好多水| av中亚| 男人在线天堂| 少妇人妻太紧太深av| 欧美黄片欧美黄片xxx| 377p欧洲日本亚洲大胆| 国内精品久久久久影院亚洲| 激情五月婷婷| 97青青操视频| 青青三级视频| 青草成人免费视频一COm| 最新AV在线| 亚州性色| 自拍视频一区在线观看| 欧美色五月| 欧美性战999| 天天看高清麻豆| 亚洲青青草| a啊啊啊啊啊啊啊啊一区二区| 美女9118禁| 伊人网免费视频| 亚洲欧美国产其他二区| 欧美色三级片91| 日韩二三区| 国产精品色约约| 精品在线蜜臀| 久久黄色视频一区二区三区 | 亚州国产成人精品女人久久| 欧美激情综合网| 国产操逼视频在线观看| 天天躁日日躁AAAXX| 99国产精品人妻人伦| 久久神马影院| 欧美激情视频一区二区| 久久AV无码网址| 色综合中文字幕不卡| 九九国产热| 麻豆成人AV| 日韩丰满熟妇| 亚洲欧美九九| 欧美日韩妖精91com| 一区二区三区美女超清| 亚洲一区日韩| 18禁久极品美女久久哦哟呀!| 超碰在线日韩一区| 精品日韩中文在线| 欧美夜色| 亚洲无线观看久久| 婷婷在线视频| 国产欧美日产一区二区三区 - 国产欧美日 | 久9爱经典视频| 国产精品内射婷婷一级二| 免费看欧美美女黄色大片| 91天堂视频| 天天综合-91入口| 亚洲第2页| 日本免费一区二| 青娱乐 青青青操 日逼| 欧美婷婷久久| 97色在线视频| 五月婷婷综合网| 国偷自 一区| 26uuu欧美日韩| 99青草| 大香蕉草草| 深田咏美亚洲精品福利社| surenchaopeng| 中国操逼无码| 日本999精品视频| 97亚洲在线| 婷婷久久五月| 亚洲视频精选| 超碰av在线| 99在线精品观看视频中文| 日韩人妻播放| 98福利在线视频| 日韩性爱免费视频在线网站| 中文字幕伊人| 乱伦3P视频| 成人精品欧洲亚洲| 最新国产精品久久精品| 婷婷人妻激情| 激情第四色| 人人澡人人干| 有码免费观看| 国内偷自视频区视频综合| 成人综合视频久久| 涩涩涩综合| 日本啊啊啊啊啊视频| 国产丝袜欧美在线视频| 新视频sss国产| 国产中文大片资源中文字幕| 色阁阁AV综合网| 性在久久久久久| 日本国产二线女色| 亚洲少妇色| 在线视频 亚洲精品| 在线啊啊啊啊| 色综合久久88色综合久久天天| 热热色国产一二区AV| 欧美激情综合| 热久久国产| 久久华人网| 久久久人妻| 精品免费视频国产一区| 欧美 亚洲 综合 制服 另类| 开心五月婷婷激情| 色哟哟AⅤ| 好舒服视频| 欧美99热| 国产不良强奸视频免费看| 色九九综合AV| 日本免费一区二| 淫荡少妇免费| 色欲天天婬色婬香WWW夜色| 少妇人妻无码| 五月丁香婷婷啪啪| 久久久久亚洲三级电影| 东北老熟女| 大香蕉免| 91九色在线| 日韩电影在线观看网址| 日韩成人人妻网站| 超碰人妻中文在线| 小草三级久久观看| 在线v中文字幕一区二区三区| 91丝袜在线播放| 九九九精品一区二区无码| www.yw尤物| 欧美亚洲一级在线观看| 97在线免费观看| 亚洲色图综合网| 亚洲精品819| 黑人嘿嘿嘿超爽免费视频| 七月婷婷综合| 亚洲精品欧洲色| 日本操逼视频在线| 99少妇| 色在线69堂| 福利风月五月天影院| 日韩中文字幕二区| 亚洲九月丁香| 精品国产人成在线| 三级AV入口| 男女啪啪网站免费视频| 欧美加勒比| 日韩无码服务区| 九九九九精品一区| 亚洲成人精品久久久| 亚洲高潮少妇| av九九| 人妻在线视频| 亚洲国产一级精品毛一级精品看免费视频 | 午夜精品久久久久久久99| av大香蕉网站| 丝袜内射| 午夜啊啊啊| 嗯啊不要啊啊在线观看视频| 日韩情色AV| 亚洲情色1区| 久久香蕉国产传媒一区剧情天美| 人妻熟女一区在| 色999五月色| 国产精品无码AV网站| 免费观看的黄色的网站| 国产综合网站在线播放| 在线综合色| 国产精品无码av| 日韩美女操b| 波多野42部无码喷潮在线观看| 青娱乐999| 亚洲欧美国产va在线播放频| 天堂69亚洲精品中文字| 高清无码在线播放网站| 日韩国产欧美伦理在线| 欧美性爱三区二区| 大奶啊啊好爽 | 无码二级三级| 欧美色就是色| 亚洲一区操| 天天激情干| 日韩三级天堂在线观看| 五月天婷婷久久| 国产欧美日韩在线观看麻豆传媒公司| 日本三级人妻a人妻一在线| 日本精品国产视频| 91九色丰满高潮| 超碰在线免费一区二区三区| 国产白丝精品在线观看| 亚洲伊人a线观看视频| 欧美日韩操逼动图| 丁香五月婷婷基地| 99www.bibizy香蕉资源国产一区二区三区高清 | 一级特级aaaa毛片免费观看 | 欧美色图私拍91| 国产精品午夜福利视频| 熟女少妇视频| A级毛片在线看免费| 精品v日韩欧美国产| www.色99| 97精品国产手机| 91痴汉| 五月亭亭六月丁香| 中文字幕aⅴ在线视频| 国产亚洲99久久精品| 亚洲欧美九九九| 少妇特黄一区二区三区| 久久久九九九| 激情五月天社区| 日韩97视频!在线| 久久中文字幕女同性恋一区| 日韩av性爱在线播放| 国产精品成人蜜臀AV在线| 精品久久久久,69国产成人精| 好看的久久不射无码影视影院| 青娱乐黄色录像| 久久一二三四五六七八九区区区 | 欧美制服另类丝袜| 97在线日韩中文字幕| 亚洲春色一区二区三区| 婷婷香蕉欧美在线一区二区三区| 蜜色网色哟哟| 天天视频综合在线观看视频| 狠狠 91| 狠狠爱AV| 色波多| 美女久久久久久久| 少妇蹲下露出大唇5| 97人妻免费中文字幕| 日韩中文字幕在线视频观看| 亚洲av综合伊人久久| 久久综合久色欧美综合狠狠| 国产强奸无码乱伦| 青青操青娱乐| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 欧美精品三级黄片| 俺去也婷婷| 欧美黑人168页欧美黑人167| 377p欧洲日本亚洲大胆| 亚洲第一色页夜| 91社区伊人| 九九九九九九九精品视频| 国内成人圈中文字幕无码视频| 嫩草美女久久| 嗯嗯啊啊视频一区二区三区| 免费中文综合精品| 久久色一区| 国产强奸乱伦第1页| 亚洲天堂区| 亚州欧美另类| 五月激情小说| 欧美夜夜| 丝袜综合色图| 高潮的A片激情扒开一区| 诱惑人妻欧美一区在线播放| 乱伦熟女专区| 天天澡天天爽日日av| 天天操人人操狠狠插| 精品人妻一区二区免费蜜桃| 国产野战露脸在线播放| 在线情色电影 91大| 国产第25页在线观看| 一区二区三区在线日韩影院观看| 欧美一级做a爰片免费视频| 一区二区不卡免费| 激情视频网址| 国产精品国产亚洲区艳妇糸列| 欧美黑人猛交春色影视大全| 亚洲无线码欧洲精品区别| 吉川爱美亚洲二区在线| 国产97视频免费观看| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 天堂俺去俺来也www久久婷婷| 国产午夜视频| 午夜高清成人在线视频| 91亚洲综合在线| 国产白嫩精品久久| 免费在线黄片视频| 春色91| 黑丝少妇麻豆| 亚洲制服欧美另类内射| 午夜爽爽爽| 夜夜福利| 色婷婷成人| 亚洲第一页第二页激情| 亚洲AV人人澡人人爱| 亚洲五月天激情| 成人免费性爱视视| 人妻色情天天操| 97午夜剧场日韩| 欧亚成人| 激情综合网亚洲| 亚洲电影91| 天天日天天色| 丝袜美腿制服人妻二区中文字幕 | 盗摄女人妻在线| 久久9精品| 美女AV一区二区| 综合激情五月丁香| 强奸国产精品视频| 羞涩视频| 国产美女91| 人人超碰在线观看黄| 九九热最新| 亚洲一级性爱视频免费看| 诱惑网综合| 91视频综合在线| 亚洲AV资源| 欧美日韩91| 岛国免费黄色网址| 26UUU欧美日本| 大香蕉中文网| 精品无人区麻豆乱码1区2区图片| 玖玖资源中文字幕制服丝袜| 亚洲有薄码区日本系列中文字幕| 久久久精品国产亚洲AV无码| 看黄片视频免费| 2023天天操夜夜操| 国产成人在线观看网址| 男同专区一区二区三区在线| 亚洲精品国产熟女久久久| 禁十八久久| 91原创在线观看| 婷婷五月天网| 久久久久久国产精品| 熟女精品va中文字幕| 岛国在线免费视频| 囯戸精品高潮呻吟旡码| 看日韩黄片| 欧美日本成人一区二区| 久久精品国产亚洲AV先锋| 日韩本不卡视频在线观看 | 欧美在线色图| 国精品一区二区三| 日韩影片中文字幕一区二区三区| 97资源制服丝袜| 五月丁香色综合| www久久99| 91久操| 国产欧美一区激情交| 国产区性爱在线视频秋霞豆| 欧美亚洲日本视频久久久 | 精品久久久久成人码免| 欧美图片校园春色| 国产综合久| 先锋女优在线观看视频| 乱伦强奸区日韩| 家庭乱伦麻豆| 99在线免费公开视频| 精品国产一区二区三区在线播出| gogogo免费高清看中国国语| 懂色天天爱天天日天天射天天澡| 日本成人电影资源网| 日本www操操操| 国产高清无码一区二区三区四区皇冠| 欧美性爱系列| 色爱综合网| 亚洲国产精品乱码在线观看| AV高清一区| 97精品久久久久中文字幕| 成人精品欧洲亚洲| 清纯唯美综合| 亚洲欧美国产va在线播放频| 老熟妇一区二区三区…| 精品少妇一区二区三区在线视频| 男人的天堂不卡一区二区| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 欧美日韩中文视频播放| 欧美日韩大黄片| 精品中文字幕一区二区l - 百度| 99九九久久| 婷婷综合在线观看| 台湾佬中文娱乐网久久久久久久久久com | 日韩精品视频在线观看一卡二卡| 久久人妻办公室视频| 亚洲宗合网| 婷婷爽人人婷婷爽视频| 乱伦a片视频| 免费看日本操逼视频| 99999久久久久9国产精品| 日韩丝袜高跟制服在线观看| 黄色工厂这里只有精品| 国产二区视频在线观看电影| 五月丁香色色网| 久久超碰免费的| 亚洲人妻爽爽爽| 亚洲啪AⅤ永久无码| 久久久中文| 精品人妻一区二区乱码一区二区| 久久精品区| 国产高清26uuu| 日本超碰在线国产一区| 北野未奈加勒比av| AⅤ片水多多| 啪啪91| 欧美 综合 亚洲| 日韩大香蕉| 国产欧美日韩在线不卡第一页| 老熟女91av| 亚洲综合嫩| 亚洲欧美自拍偷拍| 97干色天堂| 日本Suv精品一区二区| 亚洲欧美综合区自拍另类| 九九久久一区二区三区| 少妇天堂| 女人高潮抽搐喷水视频网站| 久久草视频污视频| 9国产超碰| 久久黄色网址| 日本精品一区二区不卡| 天天日B夜夜干B时时操B| 91九九九小逼| 欧美夜夜草视频| 日韩97超碰中文字幕| 久久伊人东京热| 色综合久久88色综合久久天天| 日韩少妇丰满亚洲| 日本中文字幕不卡视频| 大香蕉在线视频15| 国产精品美女| 玖玖97综合| 超碰97人妻在线| 97久久精品亚洲| 久久免费9| 激情五月天色播| 色色九区| 加勒比无码一区二区三区| 水滴偷拍| 中文高清一区二区的| 国产一区在线看| 清柠毛片| 黄色免费一级在线毛片| 玖玖爱伊人玖玖爱| 大香蕉综合| 久久欧美激情| 久久熟女人| 一级片视频啪啪| 97欧美精品综合| 人人做,人人操,人人摸| 久久一二三四不卡| 顶级丝袜熟女一区二区三区| 亚洲情色综合网| 十八禁视频网站| 色淫网站优优视频| 中文啪啪视频| 日小BB小视频| 久久久一区二区| 色婷婷丁香五月天| 思思热一热婷婷热一热| 人妻素股| 婷婷久久五月天| 日韩在线观看三级电影| 美女主播色欲91抠b在线播放| 久久综合亚洲色1080p| 久久成人精品| 蜜臀av在线播放一区二区三区| 日韩欧美日韩| 国产精品视频在线播放| 国产精品亚洲免费| 国产精品免费久久久久久久久久| 欧美在线l亚洲| 精品一区二区亚洲国产| 天天看天天日天天操| 福利天堂| 亚洲另类综合欧美| 国产精品久久99日日| www欧美91| 欧美狠狠鲁| 一级A啪啪啪啪| 国产强奸无码乱伦| 亚洲s色图| 五月天春色激情网| 一区二区三区 日韩欧美| 不卡在线观看视频| 91处女在线视频| 99国内精品| 欧美成人一区二区三区在线播放| 91美女小视频| 久久综合久色欧美综合狠狠 | 国产午夜视频| 国产剧情一区在线观看| 91人妻素女| 2017av无码免费无线播| 青青青草原| 国产乱人妻精品入口| 亚洲色图91欧美日韩| 思思性爱| 中文精品一区二去| 五月亭亭六月丁香| 五月天婷婷社区| 69久久久久久久久久久久久| 日韩人妻操B| 六月丁香久久| 强奸乱伦大香蕉网| 琪琪精品免费一区二区三区| 97精品久久| 久久99久久99精品天美传媒棢·纸:. | 乱伦图一区| 18禁看网站一区| 狠狠爱大香蕉| 九九五月天| 国产91专区| 日本淫穴在线| 99综合自拍| 观看免费区二区三区二| 色五月婷婷麻豆在| 99婷婷| 日本中文字幕在线电影| 免费黄色A片| 乱论91| 欧美αv.com| 精品高清av中文字幕| 亚洲美女av无码| 九九九九九精品| 伊人九九九| 中韩中文字幕在线观看| 哑洲在线| 欧美啪啪啪91| 欧美亚洲首页| 日韩十八禁| 欧美97色| 91操操操操| 日韩成人高清一区二区| 亚洲婷婷综合网| 一中国女人毛片水真多| 黄色免费网| 亚洲密乳AV| 园内精品自拍视频在线播放| 欧美aaaaaaa| 午夜电影在线观看无码专区| 日本性爱少妇| 亚洲九九夜夜| 色香阁在线| 亚洲国成人情色好看电影| 秋霞午夜视频一区二区| 黑人精品久久97| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 蜜桃精品一区二区三区ww| 久久不卡一区二区 | 亚洲密乳AV| 午夜影美女日鸡鸡天天视频国产| 九九综合久久| 九色97| 啊啊啊97视频| 97欧美色| 1区2区3区视频| 日本性交操一区二区不卡系列| 乱伦一区二区三区‘| 国人欧美精品一区二区| 天天爽天天干| 久插不卡| 偷拍亚洲视频一区二区三区四区| 啊v在线观看视频| 国产精品白丝在线播放| 国产91精品福利在线| 99精品免费| 草伊人高潮喷水超碰| 97精品网站| 97超碰超碰| 免费一级特黄特色大片在线观看看 | 欧美性爱五月天| 少妇69中文| 大香蕉99re| 青娱乐老司机视频| 色婷网| 久久111| 国产91美女视频| 一区操逼| 久久思思热| 九九九精品一区二区无码| 精品天堂| 岛国黄色短视频| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 久九九九九九九九热| 国产精品点击进入在线影院高清| 日韩av一级黄片| 亚洲国产一级中文综合久久天堂在线免费观看| 久久噜| 日本成熟少妇A∨网站| av一区二区三区 中文| 亚洲宗合电影| 99re久久| 立川理惠无码一区二区| 精品然女一区二区| se..亚洲欧美| 亚洲AV无码乱码在线观看性色| 91殴美大片| 欧在线一二区| 99热综合| 999熟女精品| 中文字幕日韩电影人妻| 天天爽爽爽爽| 偷窥自拍亚洲| 懂色AV蜜臀无码精品APP| 爱啪精品一区| 另类图片欧美激情综合| 人妻啊啊人妻啊啊| 99re黄| 日本午夜久久电影| 日本不卡一区二区三区| 久操网无码在线| 亚州色站 日韩电影| 国产视频人人网| 天天影视网综合少妇| 青女偷拍网| 日韩不卡av一二三| 尤物视频偷拍免费| 丝袜剧情| 龙兴卡官方查询| 日韩卡一卡二卡三在线| 91天天爱| 乱伦1色页| 成人热久久精品| 日韩无码操逼片| 99www.bibizy香蕉资源国产一区二区三区高清| 超碰色综合| 成人AV素股で擦久久| 极品销魂美女一区二区 | 精品十三区| 岛国免费视频在线| 密臀AV在线| 亚洲囯产精品女人久久久| 91性高| 欧美不卡二区| 欧美女同在线| 五月天婷婷色色| 综合第一页| 亚洲最大的黄色电影网站。| 无码137片内射在线影院| 久久九七| 美女写真| 欧美综合综合| 人妻夜夜爽天天爽麻豆三区网站 | 亚洲?V无码专区在线电影| 欧美亚洲美少妇一区二区| 夜夜操青青草| 俺也射| 大香蕉97久久| 国产亚洲日韩欧| 97视频新免费| 超碰99在线观看| 国产v亚洲v日韩v欧美v片另类| 亚洲日韩青青草色月| 亚洲成人无码影院| 97中文字幕九区| 女同性恋一区二区三区精品视频| 男人天堂黄片| 婷婷久久久精品| 97超碰69| 日本欧美一区二区三区免费| aV中文麻| 夜夜狼人妻| 手机在线人成免费视频| 1024精品在线| 日韩人妻无码精品系列| 中文字幕 国产区| 欧美精品二区视频在线| 天天综合网~91综合网| 人妻啊啊人妻啊| 一级黄色视频网| 欧美亚洲手机在线| 青青草日本中文字幕| 日韩一级片| 国产91会所女技师在线观看| 久久久久久99999国产精品| 天天操女人| 亚洲 欧美日韩 另类| 91丨人妻丨国产丨丝袜| 色亚州人久干视频在线观看免费版| 中文激情网| 欧美人人曰人人操人人射射| 密臀成人视频久久久| 丝袜喷水在线| 久久亚洲婷婷| 亚洲中文一区二区三区| 亚洲AV无码乱码| 综合一区二区影视| 不卡九肏| 人妻熟女一区在| 一区二区三区四区免费视频| 天天干天天操天天操夜夜操天天操 | 330dv亚洲成年视频网| 日韩三级视频一区二区三区| 无码人妻精品一区二区中文| 欧州91高潮| 人人澡人人澡人人| 久草在| 毛片视频白嫩| 色婷婷丁香五月| 天天视频黄网站| 国内精品久久人妻性色av| 亚洲丝袜诱惑| 欧美伊人电影| 亚洲AV色图一区| 日韩电影天堂视频一区二区| 观看免费区二区三区二| 亚洲高潮少妇| 国产激情久久久| 在线v中文字幕一区二区三区| 蜜乳AV.COM| 豆花视频操逼网址 | 久久av网| 激情图片伦理国产一区二区日韩| 五月天婷婷色| 丁香五月综合| 婷婷亚洲综合| 久久欧美性爱视频| 精品国产乱码久久久久久口爆网站| 人妻丰满熟妇一区二区三| 欧美精品久久96人妻无码| 亚洲欧美日韩激情不卡| 精品对白久久不卡| 啊啊啊啊免费视频| 国产丝袜啪啪| 成人性交午夜免费片| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 少好三P| 日韩无码AB| 97超视频在线观看| 加勒比伊人综合| 久久综合av| 国产精品久久久久久9999| 日韩中文9| 大香蕉日韩欧美| 性感美女91影视| 美女t无毒不卡不卡| 亚州欧美另类| 丝袜AV一区二区三区| 人人妻人人澡人人爽久久av| 蜜臀99精品国产高清在线观看| 97超碰精品图片| 国产乱子伦久久精品综合一区二区三| 亚洲欧美另类图片| 日韩啊V| 欧美日韩不卡a片| 亚洲精美粉嫩嫩泬在线观看| 欧美强奸乱能| 青青草天天亲夜夜操网| 91大学精品激情戏| 欧美黄色图片| 色 亚洲 91| 无码九九| 国产精品操| 成人影院永久免费观看网址| 久久精品毛片免费不卡| 九九综合久久| 狠狠躁AV| 欧美午夜视频| 一本大道青青| 国产v亚洲v日韩v欧美v片另类| 麻豆国产视频精品观看| 黑人无码一区二区| 欧美亚洲丝袜人妻制服99| 蜜臀亚洲中文| 日韩丨制服丨中文|在线| 欧美日韩亚洲天堂| 人妻一区二区三区视频| HEYZO高无码国产精品227| 发朗少妇买婬全视频中文| wwe 天天干.com| 91在线一起| 亚洲欧美另类激情小说| 人妻 中文 日韩| 亚洲五月丁香花狠狠干一区二区三区| 欧美亚洲影视| 熟人人妻少妇精品久久| 蜜乳AV免费观看| 丁香婷婷大香蕉| 青青草在线视频欧美| 97久久超碰国产精品| 伊人网免费视频| 婷婷色婷婷| 大乔未久88一区| 丰满人妻一区二区三区蜜桃视频| 人人操人人操人人操人人操人人操人人人11.CM | 逼逼逼逼操操操操操操操操操午夜剧场| 天堂种子在线www网资源| 亚州成人a∨| 亚洲欧美综合网 | 久久亚洲熟妇在线视频| 91亚洲影视| 国产精品无码av| 国产精品久久久视频| 欧美性少妇| 久久riav中文精品| 日本免费不卡二区| 欧美日韩国产精品久久色婷婷| 91免费看一区二区三区| 日本片日本片祼观看网站在线看中文版网页在线看 | 欧美一区二区成人一卡| 天天综合-91入口| 日韩欧美字幕亚洲一区二区| 另类av天堂| 呦呦一区| 亚洲第一页色| 99热这里只有精品1| 韩国黄片aaaa| 免费人人搞97| 大茄子熟女AV导航| 男人的天堂com| 男人的天堂午夜av| 嗯嗯啊啊视频在线看| 精品久久97| 亚洲限制级在线| 国产精品三级视频网站| 亚洲美欧999| 人妻丝袜日本| 丁香五月色情| 亚洲AV永久无码精品成人调教| 性爱Av免费| 亚洲色图加勒比| 国产91影院| 91n美女视频| 97天天日| 怡红院视频在线| 啊啊啊啊网站| 国产精品天美传媒| 少妇久久久久久| 国产欧美伊人| 欧美天天弄| 欧洲无码一区二区| 偷拍亚洲| 日韩一999精品| 黄片视频观看| 久久九七| 岛国大片国产| 亚洲电影91| 强奸乱伦av电影| 欧美日韩精品久久久久东北老熟妇| 成人网站 免费观看| 一摸二插三插| 超碰人人超在线观看| 啊啊啊啊,啊啊好多水| 国产在线视视频有精品| 亚洲情色 自拍| 午夜人妻精品综合在线| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 亚拍在线| 欧美人妻精品一区二区| 大香蕉在线SuP| 丁香九月激情啪| 亚洲国产97| 欧美色图中文字幕| 93人人操人人| 后入综合久久| 极品色社| 眼镜人妻101.com| 亚洲人综合| 思思热在线视频精品| 九九九九热| 2017大香蕉国产精品久久| 精品偷拍13p欧美dodk视频| 青青青草原| 中文字幕国产精品1区| 久久久久久一日韩字幕无码| 色综合1991| 久久色人体| 久久欲| 色哟哟av| 日本九九久久99播| 太久视频| 婷婷五月天激情四射| 中文字幕-区二区三区四区视频中国 | 欧美性爱精品一区二区| 中文字幕一二三| 亚洲成人妻日韩在线| 亚洲精品色| 无码丰满熟妇一区二区浪潮AV| 97操碰| 97色色国产视频| 色爱综合网| 中文字幕美女91| 91M一社| 中 文字幕一区二区三四 五 区日 日 骚| 综合免费无码中文| 国产传媒av天美传媒在线| 久久久久密臀视频| 超碰97起碰| 亚洲国产精品成人无码久久久| 天天综合网在线观看| 啊啊啊啊啊啊啊啊要喷了| 日本曲间由美性生活片| 最新中文字幕在线亚洲| 亚洲熟妇一,二,三期| 97射欧美| 亚洲第91页| 大香蕉在线视频15| 亚洲天堂 视频你懂的| 一区二区免费电影久久| 日本女人久久久| 久久精品人妻一区二区| 青青草日逼视频| 亚洲偷拍自拍在线视频| 一类av片在线看| 日本一区二区不卡| 亚洲双插| 亚洲日韩乱码中文无码蜜桃臀网站| 综合网,亚洲,欧美| 大香蕉九九| 夜夜影视四色| 中文字幕AV乱伦| 精品国产乱码久久| 欧美性夜| 大香蕉手机在线| 丝袜色综合| 久色99999| 91成人在线| 麻豆久久久久久久久丝袜| 日日干日日| 婷婷久久综合久| 丰满人妻av一区二区三区| 欧美一级久久久久久久大片动画| 草草电影院| 日韩在线观看三级电影| 四方色播| 丝袜综合网| 欧美色图91| 国产精品天堂| 熟妇熟女一区二区三区| 欧美精品黑人猛交高潮| 亚洲综合在线91| 久久伊人东京热| 日本一二三免费久久| 青青草五月份天| 91n.欧美| 天天欧美97| 我要色综合网站| 国产白丝网站| 操熟女91| 99无码| 欧美一区二区三区不卡高清视频| 亚洲全色网| 欧美第一页| 日本熟女不卡视频| www.久久最新地址| WWW.加勒比人妻一区不卡.com| 亚洲精品丝袜| 嗯……啊…嗯嗯…啊…好舒服| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 人妻日日夜夜精品| 中文字幕国产精品1区| 欧美亚综合色图|