久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

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

C++ split() 字符串分割的五種實現(xiàn)與性能實測 最近在做一個跨平臺的消息中間件需要頻繁解析配置文件里的鍵值對和標志位列表形如key1value1;flag1;flag2hello world這種格式。按常規(guī)思路第一反應是去找std::string有沒有現(xiàn)成的split()接口。翻了一圈標準庫答案是沒有。C 就是這么有個性它把“怎么拆字符串”這個問題完全留給開發(fā)者自己解決。于是我又一次老老實實地自己寫了一個split()順便把這幾年的心得整理成這篇文章。這篇文章不打算講太高深的東西主要圍繞“C 實現(xiàn)字符串分割函數(shù) split()”這件事把我實際用過的方案、踩過的坑、性能實測數(shù)據(jù)以及最終沉淀下來的工程級實現(xiàn)都寫清楚。如果你正在處理配置解析、日志清洗、命令行參數(shù)拆分這類需求這篇文章可以直接當參考。1. 這件事的起點為什么需要自己寫 split1.1 項目里的真實需求場景我遇到的場景很典型一個配置項是一個長字符串由分號分隔多個子項每個子項內(nèi)部可能又是keyvalue結構。如果 C 標準庫自帶了 split代碼大概會寫成auto items split(config_str, ;); for (auto item : items) { auto kv split(item, ); // ... }但標準庫沒給這個接口所以上面這段代碼在 C 里無法直接編譯必須自己定義一個 split。這類需求在 C 項目里出現(xiàn)的頻率非常高不只是配置解析像網(wǎng)絡協(xié)議的自定義報文分割、命令行參數(shù)的解析、CSV 格式的簡易解析全都繞不開“把字符串按某個分隔符拆開”這個基礎操作。有人可能會說用 Python 或者腳本語言干這活多簡單C 的字符串處理就是笨重。這話有一定道理但在要求高性能、低延遲或需要嵌入到客戶端 SDK 的場景里C 依然是主力語言字符串拆分這種高頻基礎操作只能自己造輪子。作為一個合格的 C 開發(fā)者手寫一個健壯的 split 是基本功。1.2 標準庫為什么一直沒加 split很多人好奇C 標準庫為什么這么多年都不提供 split原因主要有三個。第一標準庫的設計哲學是“提供最小但通用的構件”而不是把每個功能都封裝成現(xiàn)成函數(shù)。std::string::find、std::string::substr、std::istringstream、std::getline、std::regex這些已經(jīng)覆蓋了拆分的全部能力標準委員會認為你再組合一下就能得到 split不需要單獨提供。第二split 本身存在太多變體。返回值怎么定是vectorstring還是vectorstring_view分隔符是單個字符還是字符串要不要支持多個分隔符空字符串是保留還是丟棄首尾分隔符怎么處理這些語義沒有統(tǒng)一答案標準庫一旦提供某一種就會限制其他用法的發(fā)揮。第三歷史包袱。C 標準庫演進極其謹慎任何新接口都必須在多個委員會會議里反復打磨像 split 這種“一百個人有一百種接口定義”的功能優(yōu)先級排得很低以至于 C23 才出現(xiàn)了相對可用的 ranges 方案。1.3 設計 split 前必須先想清楚的幾個問題寫 split 很簡單寫一個“好用且不坑”的 split 卻需要先回答幾個問題。返回值選vectorstring還是vectorstring_view這直接關系到性能。vectorstring每個元素都是一次堆分配數(shù)據(jù)量大時開銷明顯vectorstring_view則只是原字符串上的視圖零拷貝但代價是要求源字符串在視圖生命周期內(nèi)保持有效而且切割后無法直接修改每個元素的內(nèi)容??沾呗砸埠荜P鍵。按a,,b中逗號拆分標準做法應該得到[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相關的坑當字符串結尾正好是分隔符時最后一個空子串不會輸出再者一律假設輸入以文本行形式存在遇到\0之類的字符時行為會變得微妙。實測下來這個方案的性能在中規(guī)中矩的級別因為istringstream內(nèi)部有 locale 處理和流緩沖機制相比直接find要慢不少。它適合邏輯簡單、不在乎性能、并且明確知道不需要保留空串的場景比如按空格拆分用戶輸入的命令行單詞。2.2 思路二find 加 substr 手工切割這是最經(jīng)典的手工方案也是我在生產(chǎn)環(huán)境最常用的基礎版本#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 好不少因為少了流對象的構造和 locale 開銷只調(diào)用find和substr。缺點是每次substr都會產(chǎn)生新的字符串拷貝如果被分割的字符串很長、次數(shù)很多內(nèi)存分配壓力會顯現(xiàn)??梢栽谘h(huán)前tokens.reserve(...)預留容量也可以換成string_view版本進一步降低拷貝。2.3 思路三正則表達式統(tǒng)一切割正則方案可以優(yōu)雅地處理復雜分隔符比如同時按逗號、分號、空白分割還能支持變長空白#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])相當靈活。std::sregex_token_iterator配合-1表示“匹配模式之外的片段”這個用法是最容易踩坑的地方很多人寫成0結果拿到的是分隔符本身而不是分割結果。正則方案最大的代價是性能。std::regex的構造和匹配開銷非常大實測用正則做一次簡單拆分比find版本慢十倍甚至幾十倍都很正常。所以我的建議是能用find就別用正則只有分隔符確實是復雜語境時才值得上正則而且最好把std::regex對象緩存起來復用不要每次調(diào)用都重新構造。2.4 思路四C23 ranges 的 split_view如果你的編譯器已經(jīng)支持 C23標準庫終于提供了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得到的每個子范圍不是直接能當std::string用的類型需要手動用std::string(part.begin(), part.end())構造這點和 Python 的split()完全不同初學者容易懵。2.5 方案對比一覽我用幾組典型場景做了一個橫向?qū)Ρ确奖隳惆错椖吭V求選型。方案保留空串多字符分隔符多分隔符性能量級代碼復雜度適用場景getline 流式否否否中極低簡單命令行拆分find substr是是否高低通用場景首選find 多分隔符輔助可配置是是高中生產(chǎn)環(huán)境推薦std::regex是是是極低中復雜分隔規(guī)則C23 split_view是否否中高低新項目嘗鮮從這張表能看出find substr在大多數(shù)情況下都是性價比最高的方案它兼顧了語義靈活性和性能。我的建議是先把這一版吃透再根據(jù)需求擴展成多分隔符版本這樣能應付絕大部分工程場景。3. 工程級 split 的完整設計與實現(xiàn)3.1 接口設計能干活但別挖坑寫一個能上生產(chǎn)環(huán)境的 split我不會只提供一個單薄的重載。經(jīng)過多次迭代現(xiàn)在一般提供下面幾組接口namespace StrUtils { // 基礎版本按單個字符拆分 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); }接口設計的關鍵是保持一致性。split(s, ,)應該和split(s, std::string(,))行為完全一致不能因為入?yún)㈩愋筒煌瑢е驴沾幚聿呗圆煌駝t調(diào)用方會被這種“隱式差異”坑得很慘。另外我把keepEmpty和trim默認值都設置成符合直覺的狀態(tài)keepEmpty false表示默認丟棄空串trim true表示默認修剪首尾空白這樣配置解析場景里最常見的寫法可以保持干凈。3.2 核心實現(xiàn)find 加 substr 的強化版多字符分隔符的基礎版本在前面已經(jīng)展示過了這里直接給出高級版本的完整實現(xiàn)這是我在多個項目里反復打磨后的形態(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當作負數(shù)處理。不轉(zhuǎn)會讓程序在某些編譯器上出現(xiàn)未定義行為。std::isspace的入?yún)⒁蟊仨毷荅OF或在unsigned char范圍內(nèi)的值直接傳char是踩坑高發(fā)區(qū)。std::move(token)推入vector是避免多余的拷貝構造。tokens.push_back(std::move(token))會把臨時字符串的所有權轉(zhuǎn)移給 vector 元素省掉一次深拷貝。雖然token本身就是局部變量但顯式move比讓編譯器自己推導更可控讀代碼的人也一眼能看出意圖。3.3 空字符串與連續(xù)分隔符的處理細節(jié)關于空子串的取舍我提一個容易忽略的細節(jié)字符串以分隔符開頭或結尾時語義會有歧義。例如split(,a,b, ,)如果保留空串結果應該是[, a, b]因為第一個逗號前面有一個空子串。如果丟棄空串結果應該是[a, b]。而split(a,b,, ,)保留空串時循環(huán)結束后還有最后一段結果是[a, b, ]。丟棄空串時最后一段為空不放入結果得到[a, b]。這個看似簡單的行為在解析 CSV 時卻涉及到字段對齊。比如一行a,,c表示三列中間列是空值如果用丟棄空串的策略就會變成兩列行數(shù)據(jù)錯位后面的業(yè)務邏輯全部亂套。所以我在接口里把keepEmpty獨立出來做開關解析 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)。我的一般建議是不要在基礎 split 里內(nèi)置偷懶邏輯讓調(diào)用方根據(jù)業(yè)務語義決定。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ù)場景里正好符合預期。多分隔符版本我沒加入keepEmpty參數(shù)是因為它的語義和單分隔符版本可以保持一致只是內(nèi)部用find_first_of替代find。如果你要同時支持“多分隔符 保留空串 修剪”自己擴展起來很容易照著 3.2 的代碼把find換成find_first_of就行。3.5 性能細節(jié)reserve、string_view 與內(nèi)存分配的博弈實現(xiàn)里的另一個關鍵點是預分配。如果提前知道切分數(shù)量可以用tokens.reserve(count 1)減少 vector 擴容時的拷貝。但很多場景下無法預知切分數(shù)量所以我在實際生產(chǎn)代碼里往往先快速估計一個保守容量。一個樸素的做法是預先統(tǒng)計分隔符出現(xiàn)次數(shù)size_t estimate std::count(s.begin(), s.end(), delim) 1; tokens.reserve(estimate);對于單字符分隔符std::count的開銷極低但能顯著減少 vector 的多次擴容尤其是當 segment 數(shù)量大到成百上千時效果肉眼可見。對于多字符分隔符std::count不適用可以使用find循環(huán)計數(shù)或者干脆不預分配因為多字符分隔符的切分數(shù)量通常沒那么大。如果追求極致性能可以寫一個split的string_view版本返回vectorstring_view。它完全不分配新的字符串內(nèi)存省去所有深拷貝代價是調(diào)用方必須保證源字符串的生命周期長于結果視圖。這個約束在函數(shù)內(nèi)部無法強制檢查只能靠調(diào)用約定和代碼注釋約束所以我通常只在性能敏感模塊里提供string_view版的私有工具函數(shù)不輕易放進公共接口。公共接口保持vectorstring最穩(wěn)妥。4. 踩坑實錄與性能實測實戰(zhàn)里最容易翻車的細節(jié)4.1 常見問題速查表我在各種評審和代碼 review 里見過無數(shù)次同樣的 split 踩坑這里整理成一個速查表直接對著查就行。問題現(xiàn)象根因解決方案分割結果丟失最后一個空字段getline 方案遇到末尾分隔符不產(chǎn)生輸出改用 findsubstr或顯式檢查尾串中文等非 ASCII 字符出現(xiàn)亂碼按字節(jié)截斷substr按字節(jié)數(shù)切割確認需要的是字節(jié)切分還是 UTF-8 碼點切分前者用 substr 沒問題后者要引入字符解碼分隔符是\\0或空字符串時空指針崩潰對delim.empty()未做防御開頭判斷delim.empty()時返回整個字符串使用std::isspace時傳入負值導致斷言char有符號且字符超出 ASCII 范圍先轉(zhuǎn)unsigned char再傳入isspacestd::regex拆分性能極慢正則引擎編譯匹配開銷大緩存std::regex對象或用 find 方案替代C23 split_view 得到的子范圍無法直接賦值給 string子范圍類型是subrange用std::string(part.begin(), part.end())構造大字符串拆分時反復擴容內(nèi)存抖動vector 容量不足導致頻繁 reallocate先reserve估算容量或改用 string_view分隔符連續(xù)出現(xiàn)時結果不符合預期保留空串語義和丟棄空串語義混淆顯式指定keepEmpty策略不要依賴默認值4.2 性能實測記錄我在一臺普通開發(fā)機處理器頻率約 2.6GHz內(nèi)存類型為常見的 DDR4上用一段長度約 1MB 的字符串做了拆分壓測分隔符是逗號共約 20 萬個小字段。對比了 getline、findsubstr、regex 三種方案結果如下方案平均耗時毫秒結果數(shù)量find substr未 reserve約 38200001find substrreserve 后約 31200001getline 流式約 66200000std::regex 動態(tài)構造約 1120200001std::regex 復用對象約 95200001看到?jīng)]有正則的動態(tài)構造版本比 find 方案慢了接近 30 倍即使復用了std::regex對象也慢了 3 倍左右。這個數(shù)據(jù)很有代表性如果只是按單個字符分割正則從來都不是明智選擇但如果分隔符是一個復雜的模式比如,\\s這種“逗號加任意空白”正則的語義優(yōu)勢就體現(xiàn)出來了此時 95 毫秒處理 1MB 文本也算可以接受。再補充一個string_view版本的性能參考同樣的輸入vectorstring_view版本耗時只有大約 2 毫秒。這就是零拷貝的威力但它要求源字符串在結果使用期間不能被銷毀或修改。我在解析一次性讀取的配置文件時經(jīng)常用這個版本邏輯上完全安全。4.3 生產(chǎn)代碼里的防御性細節(jié)防御性編程對 split 來說不是過度設計而是剛需。第一個防御點是空指針問題。如果接口接收的是const char*在構造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ù)配置解析場景下目標子串本身是完整的不需要按漢字邊界切分所以沒必要過度設計。真正的坑在于判斷字符是否為標點或空白時直接對char調(diào)用std::isspace會因為符號擴展導致未定義行為這在 3.2 節(jié)已經(jīng)提到過。再補充一個場景如果你需要按中文逗號或者中文分號拆分只要分隔符本身是完整的 UTF-8 字符串find正常按字節(jié)序列匹配即可std::string的多字節(jié)字符串查找不涉及亂碼問題。但如果你用find_first_of且把當字符集合傳入那就錯了因為它會把 UTF-8 編碼的三個字節(jié)當成三個獨立字符來匹配。這個區(qū)別在文檔里寫清楚能少走很多彎路。5. 實戰(zhàn)選型建議與一個可以直接抄的工具版本5.1 不同業(yè)務場景下的選型建議配置解析類需求比如keyvalue對和分號分隔的選項列表優(yōu)先用 findsubstr 的通用版本開啟trimtrue、keepEmptyfalse能省去大量空串和空白判斷的樣板代碼。CSV 解析類需求必須保留空字段用keepEmptytrue的版本同時注意 CSV 中可能存在引號包裹字段的類型如果字段內(nèi)部包含分隔符那就要寫一個狀態(tài)機解析器單純 split 已經(jīng)不夠用了。日志清洗類需求數(shù)據(jù)量大且格式多變建議用string_view版本按行切分充分享受零拷貝帶來的性能收益但是要小心日志字符串在異步線程里被復用或覆蓋的并發(fā)問題最好在切分后立刻把需要的字段拷貝成std::string存進結果結構。命令行參數(shù)拆分空間分隔和引號處理規(guī)則比較特殊istringstream能輕松處理簡單的空白分隔但如果參數(shù)里帶引號和轉(zhuǎn)義建議直接引入一個成熟的全功能參數(shù)解析庫不要重新發(fā)明輪子省下來維護轉(zhuǎn)義規(guī)則的時間能做好多別的事。5.2 一個可以直接抄進項目的完整工具頭文件為了讓你少做重復工作我把上面講的精華濃縮成一個單文件工具頭支持單字符、多字符、多分隔符拆分支持修剪和空串策略按 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; }這個頭文件應該足夠覆蓋最常見的需求。如果你需要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)好很多代碼意圖一目了然。但在決定全面使用前我建議先做一次時間和兼容性評估。一方面當前主流編譯器對 C23 ranges 的支持程度不一致部分標準庫實現(xiàn)的 split_view 在特定輸入下處理空范圍時還偶爾出現(xiàn)奇怪行為遇到這些問題排查成本不低。另一方面現(xiàn)有代碼庫若要遷移從vectorstring到視圖迭代的接口差異需要改動很多調(diào)用點不是單純把 split 函數(shù)換掉就行。所以我更愿意持一種務實態(tài)度新項目在條件允許下優(yōu)先嘗試 C23老項目繼續(xù)用我已經(jīng)跑過千萬次調(diào)用的手寫版本。手寫版不丟人它穩(wěn)定、可控、無隱藏行為這也是它能在生產(chǎn)環(huán)境長期存在的原因。最后再分享一點實際經(jīng)驗用 C 寫字符串拆分這件事我前前后后寫了不下十遍從最開始只有二十行的 getline 版本到后來帶空串策略、多分隔符、修剪能力的完整工具最大的體會是接口設計比實現(xiàn)本身更考驗功力。千萬不能圖省事把所有行為都藏在一個“智能”的默認值里否則不同調(diào)用方會互相踩對方的語義預期。好的 split 應該把決定權交給調(diào)用者用參數(shù)顯式表達需求。還有一個小技巧如果你的項目有規(guī)約要求禁止使用異常那所有返回 vector 的 split 函數(shù)都應確保沒有拋出異常的機會。std::string的默認分配器在內(nèi)存不足時會拋std::bad_alloc這本質(zhì)上無法完全避免但只要不在 split 內(nèi)部做業(yè)務邏輯判斷理論上異常只可能來自內(nèi)存分配。業(yè)務上更重要的是別在 split 里塞入自定義刪除邏輯比如“字段名不要以_開頭就過濾掉”這類需求應該放到調(diào)用方的循環(huán)里處理保持 split 的純粹單一職責。最后關于性能不要盲目追求 string_view 或者花式優(yōu)化先明確你的數(shù)據(jù)量級。每天處理幾萬個短字符串隨便寫都能滿足每秒處理上百萬行日志才值得把 reserve、move、string_view 全部用上。把有限的精力投入到真正需要的地方比復制一段“看起來很酷”的代碼更有意義。希望這篇拆解能幫你少踩幾個坑如果你有更特殊的拆分需求也可以沿著這里的思路自己擴展。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
人妻一区二区三区视频| 亚洲影视综合| 大香蕉一级黄色片久久| 一区二区影视| 99热在线只有精品| 情色五月天就去干| 少妇蹲下露出大唇5| 欧美黑人精品在线播放| 夜色AV无码手机在线影院| 亚洲国产一区二区入口| 日本91白丝| 麻豆AV一区二区| 91成人国产综合久久精品蜜月| 欧美性区| 欧美综合综合| 蜜臀久久99精品久久久| 眼镜人妻101.com| 天天色播亚洲综合网站| 久久手机好看网站| 骚女高跟AV在线| 熟妇人妻精品一区二区| www久久国产精品| 一级片在线观看高清无码| 婷婷天堂站| 岛国小电影| 中文字幕日韩情色| 国产精品一二三在线看| 97人人爱人人做人人乐| 中文一区二区三区影院| 中文字幕乱码人妻一区二区三区,99精品| 久久久久久久久久久999| 91色欧美| 人人做天天爱| 啊啊啊好湿国产一二| 国产午夜在线观看视频| 久久久久久99999国产精品| 18禁无码永久免费无限制| 91影库| 亚欧美综合| 爱射综合| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 囯戸精品高潮呻吟旡码| 91女日逼| 99综合自拍| 欧美亚洲高清| 男人的天堂欧美| 亚洲影视综合网| 青青操网| 亚洲成人激情小说视频| 少妇人妻精品| 玖玖综合色| 91欧美高清| 久久,精品一二三| 精品欧美不卡在线播放| 我爱搞逼综合网| 日韩一区二区三区四区五区| 91欧洲国产成人久久精品网站| 色大香蕉97N| 國產尤物AV尤物在線觀看| 国产白丝av| 人澡逼| 另类图片五月| 久久久久13| 欧美欲色| 秋霞男人网| 国产成人超碰在线| 99老司机精品视频在线观看| 偷看洗澡一二三区美女| 久久黄色性爱视频| 欧美一级久久久丰满| 狠狠色狠狠色狠狠五月| 超碰97中文| 青青久久久| 99热线麻豆 | 91色综合| 久久中出| 九九黄色视频在线观看| 国产丝袜美女在线一区| 久久久99999久网站| 中日韩熟女| 麻豆国产视频精品观看| 一起草AV| 日韩pv中文| www.99热| 国内三级自拍小视频在线观看 | 久久亚洲影院一区二区| 天天综合网~91综合网| 激情四射婷婷四五月天| 色性荡荡荡荡视频| 国产免费一区| 欧美 综合| 老熟妇一区二区三区啪啪| 一区二区三区四区五区久久久久久| 日韩中文字幕宗合在线| 欧美人妻制服| 色色色综合| 九九综合久久中文字幕| 中国东北熟女老太婆内谢| 日韩一级欧美一级在线观看| 在线观看av区| 男人的天堂日本东京热| 久久黄黄黄| 国产精品无码久久久久2025| 亚洲欧洲精品成人| 国产精品久久久久久久久久梁医生| 操逼操操操91| 久久精品国产亚洲av水密被窝| 欧美丝袜亚洲| 免费精品福利在线观看| 久久99干一本高清| 四方色播| 欧美人人AAA| 90后后入| 日本肉体xxxx裸交| 黑人综合色| 人妻偷拍一区二区三区| 性性欧美| 黑人精品成人一区二区三区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 国产美女在线精品免费看| 欧美夜夜狠| 日本中文字幕不卡视频| 亚洲中文字幕妇伦久久| 人人干人人操人人爱| 狠狠躁AV| 公司1区2区3区精产精| 日韩欧美性爱电影在线观看| 九九热免费国产视频婷婷伊人| 热99这里有精品综合久久| 密桃99999| 亚洲国产亚洲天堂| 午夜精品探花| 精品99999| 日本少妇va7777| 后入式999| 婷婷色香伊人| 91色黑人少妇| 激情 欧美 亚洲 小说| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 神马久久久久眼| 大香久久| 久久、1234| 久草线上视频免费看| 欧美亚洲中文| 日本熟妇自慰性高潮一区二区三区| 91xingse| 婷婷综合五月天| 国产高清精品福利| 精品九九九九| 中文字幕熟女人妻丝袜丝| 一区二区三区四区五区高清无码永久视频 | 午夜精品五区| 噜噜噜在线视频| 嗯嗯不要 视频| 丝袜亚洲91| 久久久久一本一区二区青青蜜月| 99热这里是精品| 偷拍亚洲熟女视频播放| 亚洲天堂资源网| 日本东京热大香蕉a片| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 很很操在线| 在线天堂资源亚洲| 亚洲黄色影视| 黄aaaaaaaaaaaaaaaaaa色网站| 亚洲日韩国产精品| 亚洲不卡一| 啊啊在线| 中出欧美| 东北少妇高潮zzzz| 91精品微拍福利| 好属操| 高清视频一区| 国产高清自拍| 国产野战露脸在线播放| 国产亚洲精品农村妇女| 亚洲色图第一页| 91精品婷婷国产综合久久竹菊| 国产日比| 免費人妻夜夜爽天天爽爽一区| 日韩中文字幕二区| 日韩精品一区二区日韩| 国产亚洲精品A在线观看下载| 色综合一本| 少妇高潮对白在线观看| 国产精品色片一区二区| 大香樵伊人网| 在线视频一区二区传媒| 麻豆AV一区二区天美传媒| 亚洲天天自拍| 国产高清无码一区三区二区| 人妻碰碰碰碰碰碰| 粉嫩av一区二区三区四季| 精品无人区麻豆乱码1区2区图片| 久久精品一区一起草| 啊啊啊啊啊啊啊啊在线观看| 久久一区二区三区四区五区| 免费看久久久性性| 一区中文字幕二区日韩| 精品一区二区麻豆| 在线啊啊啊| 曰韩人妻中文字幕在线| 色情综合| 国产精品国产| 蜜桃视频成a人v在线| 91狠狠色丁香婷婷综合久久精品| 五月开心久久AV官网| 欧差乱伦二三| 欧美日韩色图片| 亚洲中文字幕精品久久久久久直播 | 精品在线78| 日日黄色三级网站| 97精品一区二区视频在线观看| 国产2.3.4区| 东北老女人的激情视频| 懂色aV一区二区天美传媒| 无码国产精品午夜不卡(| 91女网站| 中文字幕人成乱码熟女香港| 亚洲国产剧情少妇激情| 亚洲国产综合图区中文字幕| 91熟女熟妇视频网站| 久九9精品| 超碰人人超在线观看| 亚洲综合网图| 天天综合91| 婷婷久草| 啪啪自拍九九综合| 丁香五月婷婷基地| KK色在线影院| 蜜桃无码AV一区二区| 欧美国产操逼| 91东京热男人的天堂| 成人片视频| 亚洲欧美在线观看免费| 国产白丝网站| 熟女中出视频| 在线精品福利免费播放| 中文字幕一区二区三区四区在线视频| 免费人人搞97| 欧美性爱一级操| 亚洲欧洲综合| 91爱综合| 三级三久久线久久99久目本WW| 超碰97亚洲| 欧美性天天影院| 色情乱伦AV| 婷婷国产精品一区二区| 伊人青青一区成人视频在线观看区 | 人妻精品综合中文字幕在线 | 激激五月| 欧美精品自慰系列寂寞少妇| 东京热视频网| 91人妻熟女| 日日干夜夜欢| 久久久啊啊| 亚洲成av人片色午夜乱码| 97综合久久| 日本免费一区二区不卡| 久久做97| 亚洲欧美精品一区天堂久久 | 日韩av色图综合| 激情五月丁香五月| 无码 黑人一区二区三区| 欧美劲爆第一页| 亚洲自拍一区夜夜操| 天无日色综合| 亚洲欧美一区二区三区一猛片| 日韩成人精品| 久久久久久99AV无码免费网站| 区自美91| 加勒比伊人综合| 好看的91视频| 亚欧美天堂在线| 日韩有码一区三区| 99精彩视频| 粉嫩绯色AV一区二区在线| 欧美日本中字另类在线| 国产人妻天天干精品| 一区二区三区黄色片a| 日本黄色大片一级视频免费麻豆| 熟妇xxxxx性春色| 国产午夜福利专区综合| 国产亚洲精品美女久久久| 男人的天堂午夜av| 日本道久久综合色色| 国产精品国产拍高清AV| 欧天美中出| aa片毛片| 鸥美插入视频| 影视综合无码少妇| 水滴偷拍| 九九人妻| 欧美日韩国产电影| 婷婷五月天av| 亚洲精品三| 日本操逼视频导航| 欧美五十路熟| 99久久精品国产系列| 97ai亚洲| 欧美综合综合| 亚洲图片视频小说| 一区二区播放| 亚洲激情深爱文学小说网站| 日韩欧美水蜜桃人妻| 久久伊人网视频一区二区三区 | 首页中文字幕中文字幕免费| 97在线视频免费| 另类小说欧美激情校园春色| 欧美日韩亚洲国产中文永久天天看| 日少妇亚洲版| 欧美少妇第一页| 精品人妻一区二区免费蜜桃| 日本最新1区2区3区| 欧美十八禁在线看| 人人操肉肉| 亚洲丝袜色| 日韩影片中文字幕一区二区三区| 国产久久免费精品视频| 大奶啊啊好爽| 黄色免费一级在线毛片| 91成人无码| 国产精品久久久久久亚洲色欲| 99老司机精品视频在线观看| 中国操逼无码| 玖玖视频在线资源一区二区三区| 国产三级中文字幕粉嫩| 亚洲无码AV九九九| 亚洲资源网| 国产女人和拘做爰视频| 天天色怡春院| 中字幕人妻一区二区三区| 97色碰| 久久99深爱久久99精品| 粉嫩绯色AV一区二区在线| 嫩草 我啊~嗯~在线| 无码久久亚洲高清,| 凹凸视频特色日本特黄| 91天堂丝袜美腿| 久久九九综合| 91久久国产精品| 综合五月婷婷| 亚洲一区二区三区春色| 日韩二级| 在免费jIzzjIzz在线视频| 欧美日韩人妻婷婷一区| 欧美精品日韩一区二区| 5278欧美一区二区三区| 91美女小视频| 欧美国产有色电影| 农村妇女一级二级三级视频| 大香蕉草草| 天天看少妇| 操逼视频色| 在线五区| 超碰激情808| 91精品久久久| 97视频在线播放| 91色鬼| 日韩欧美国产高清视频| 欧美日韩狠狠爱| 久久啊哟| 色色色欧美| 日韩成人无码| 欧美在线第五页| 中文字幕精品人妻丝袜| 亚洲天堂7777| 欲香欲色| 丰满人妻一区| 超碰538| 久久久久9久久久久| 日本熟女中文| 日韩操逼HD| 高清孕妇孕交 交| 成人熟女区| 高清不卡一二三区视频......| 久久99视频| 操逼不卡中文字幕| 五月天婷婷在线看| 99在线精品观看视频中文| 97看操| 99啪| 91蜜臀熟女| 日韩在线76| 色狠狠综合| 成人午夜无码视频| 伊人成人中文字幕久久网| 亚洲成人日韩小说| 免费精品人妻一区二区三| 亚欧色图在线激情| 色视频蜜乳| 日韩无码一区二区三区| 欧美亚洲91| 五月丁香激情四射| 久久av无码| 亚洲欧美一区二区网址| 亚洲色图尤物视频| 久久99午夜精品一区人妻| gogogo免费高清看中国国语| 色综合一本| 一区二区三区黄色片a| 亚洲 小说 欧美 激情 另类| 久久久精品中文字幕爱豆| 亚欧免费| 97九色人妻| 国产蜜臀精品一区免费尤物| 97se综合网| 蜜桃精品一区二区三区久在线| 青青操视频在线| 亚洲啪啪啪啪视香蕉| 青青草久久| 一起草在线视频| 日本精品网站在线中文| 婷婷丁香熟妇综合网| 丝袜夫妻自拍| 欧美自拍网| 老司机福利青青草| 亚洲蜜乳av| 最新加勒比丝袜在线| 一区=区三区视频| 日韩人妻精品| 国产最火爆久久国产网站网站| 日韩激情小说一区二区| 一区=区三区视频| 伊人少妇久久久| 秋霞色色影院| 96AV精品| 久草看看看| 激情抓乳插进去啪啪啪日韩 | 国产精品麻豆视频网站| 99热在线观看| 欧美性91| 日韩人妻少妇 一区二区三区| 富二代亚洲精品99| 国产精品com| 亚洲一区日韩| 91无码人妻| 国产黄色剧情影片麻豆免费播放| 69人妻精品一区二区绯色| 欧美偷| 人人射人人操人人摸| 九九热超碰97亚洲最新香蕉| 啊v在线观看视频| 欧美日韩岛国大片在线观看| 亚洲欧美一区二区不卡视频播放| 欧美αv.com| 青青草黑寡妇男人天堂| 综合伊人激情| 久插综合| 日韩欧美成人综合在线| 爱欲AV| 国产亚洲精品无码三区| 中文久久96| 欧美成va视频网站| 久久精品性| 久久久熟女一区| 90后性网国产欧美| 国产成人自拍视频在线| 蜜臀av网址| 一区二区三区男人的天堂| 成人午夜小视频手机在线看| 婷婷激情啪啪| 综合97| 久久精品人人做人人看| 成人在线日韩| 春色综合免费| 国产精品视频白浆免费| A男人的天堂| 91伊人久| 综合激情97 | 曰本人妻人人澡人人夹| 一二三啪啪专区| 久久精品国产亚洲5555| 欧美极品女人的天堂| 精品小视频在线| 9999免费精彩视频| 欧美一区二区三区黄色影视| 999久久久免费精品国产牛牛| 五月丁香六月激情| 97在线观看免费视频| 韩国女主播青草福利视频| 九九九九精品| 亚洲美女色图| 把腿张开老子CAO烂你| 91激情国产| 色99视频| 韩国一级做a久久久久| 伊人成人情色综合| 色在线亚洲视频www| 天操天操夜操夜月月年年操操| 天美麻花大全视频| 精品人妻一区二区三区在线视频不卡| 亚洲欧美大| 免费观看国产不卡av| 欧美日韩97在线| 欧美色三级片91| 人妻一二三区| 91n处女在线观看| 美女97超碰| 熟女六十路| 自拍偷拍 日韩欧美| 亚洲双插| 黄色片大香蕉| 精品十三区| 97干天天| 色偷偷2020免费视频播放| 91老熟女91老女人| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 国产日韩精品suv| 国色综合天| 久久男人的天堂| 男女猛烈无遮掩视频免费软件| 道久久五香丁月婷婷激情综合| 久久国产精品一级二级三级| 久久婷婷色| 啊啊啊免费视频| 国产99999久久精品| 久久久久久久久久久久久9999| 午夜.DJ高清在线观看免费7| 欧美一级特黄淫片在线观看| av天堂精品久久| 97操b| 国产超碰在线一区| 97爱爱| 国语av狠狠色丁香婷婷综合激情| 欧美性爱精品一区二区| 一级啊性爱在线视频| 男人亚洲91首页在线| 久久超碰、| 熟女久久久| 91精品久久久久久77777| 免费试看60秒| 人妻少妇精品无码专区二区密桃| 亚洲欧美首页| 极品销魂美女一区二区| 欧美亚洲日本视频久久久| 欧美92| 97久久免费| 天天综合青苹果| 午夜.DJ高清在线观看免费7| 国产精品自拍欧美在线| 综合亚洲欧美精品日韩?v| 欧美一级三级| 蜜桃视频啊啊啊啊| 久久九九一区二区三区成人| 国产精品露脸在线观看| 丁香九月激情| 亚洲成人在线乱码色午夜| 亚洲欧美综合区自拍另类| 97视频620| 麻豆久久一区二区三区| 日韩人妻精品久久久久| 日本不卡一二区| 国产精品无码论坛| 五月天精品| 成人三级片无码| 欧美大色交| 国产日韩欧美中文在线播放 | 我想要啊 啊 啊| 蜜乳Av成人片网站| 97在线公开视频| 天天天天天天天天天天干美女| 国产性刺激| 人人操人人爽人人操人人| 九九热精品| 在线αⅴ| 久草新免费| 亚洲色图欧美色图日韩色图| 精品国产乱码久久久久久久久久毛片| 日本一区二区成人在线| 麻豆熟妇乱妇熟色A片在线看| 亚洲欧美一区二区三区一猛片| 精品人妻一区二区三区免费视频| 91人人看| 国产精品无码av| 久久是精品| 95精品在线| 另类TS人妖一区二区三区| 熟妇一区,二区,三区。| av婷婷色网| 亚洲另类小说卡通动漫| 黄色工厂这里只有精品| 999综合色| 熟女精品一区二区三区| 91色人妻| 91天美免费| 成熟熟女国产精品一区二区| 欧美后进式| 中文字幕成人理论在线| 高清国产性猛交xxxx乱大交| 97久久天天综合色天天综合色电影| 另类图片五月天| 女同女同恋久久级三级| 碰碰97| 日韩本不卡视频在线观看| 97爱b| 啊啊啊好爽快点啊啊啊嗯嗯| 手机在线中文字幕国产| 激情小说亚洲色图| 亚洲天天更新| 午夜福利合集| 中精品一区二区三区| 欧色性第一页| 国产精品suv一区| AV天堂电影网| 91美女视频在线| 久久本道| 自拍盗摄一区| 色爽爽文学| 亚洲天堂区| 精品区9| 五月丁香综合网| 婷婷月色| www.91色综合| 精产国品一区二三产品| www.一本大99| 青青三级视频| 中文字幕精品亚洲熟女| 欧美日本视频一区| 少妇特黄一区二区三区| 碰人碰碰人人开房人肉| 这里只有精品97| 91精品网站| 亚洲精品自拍| 无码高清国产AV| 一级久久性爱视频| 另类视频在线| 久久久久久中文版| 加勒比综合在线| 国产欧美日本亚洲精品| 91午夜无码| 大香蕉五月天婷婷| 一区二区三区成人| 亚洲色图欧美| 少妇一区二区三区高速| 亚洲激情综合| 久久一区二区加油站| 亚洲 无码 偷拍| 日韩激情中文字幕有码| 丁香六月天| 久久久91福利姬| 美女诱惑一区| 久久综合婷婷| 亚州色阁| 青娱乐欧美激情一区二区| 中文字幕国产精品1区| 成人一区二区三区四区| 特色a在线上| 婷婷丁香五月天综合东京热| 后入人妻一区| 超碰欧美97| 91操碰| 亚洲脚交| 国产三区免费在线观看| 神马久久69| 国产综合在线视频网站| 五月婷视频| 精品少妇99| 无码聚合| 久久九操在线观看| 丁香婷婷啪啪| 麻豆精品.欧美精品.日韩精品.| 欧美成人黄网色网站| 黑人性欧美| 五月婷婷大香蕉| 国产无码成人无码| 国产SV一线| 国产精品嫩草影院免费| 午夜AV污污污| 干婷婷综合网| 综合久久97| 欧美日韩人人精品| 久久久99免费| 中文字幕AV片| 嗯啊抽插大香蕉网页| 五月天久久婷婷亚洲| 日韩精品一区二区日韩| 国产 大胆 对白| 曰韩无码777| 国产成久久综合片| 2019天天操天天爽天天拍| 青草草免费网站av| 美女骚尻视频| 九九久久一区二区三区| 亚洲美女自拍偷拍视频| 亚洲精品久久久久久| 欧美日韩黄色片一区二区三区四区人与兽做爱 | 国产精品香蕉| 久久精品99久久久久久| 99视频内射三四| 九九九九热| 人妻无码一区二区三区久久99| 91九色在线| 青青免费在线视频一区| 亚洲蜜臀精品视频久久| 狠狠夜色午夜久久综合在线| 亚洲人成网www| 无码人妻精品一区二区中文| 精品久久97观看在线视频| 美女AV一区二区| 久久人妻视频网| 大香网站| 丰满人妻无码一区二区三区| 五月婷亚洲精品天堂| 亚洲成人AB| 欧美性暴力猛交XXXX | 天天摸夜夜摸| 六月丁香婷| 九九黄色视频在线观看| 国产中文字幕在线点播| 极品白嫩美少妇在地板上位骑射淫水泛滥| 加勒比伊人综合| 欧美爆乳精品一区二区| 国产成人超碰在线| 久久久久久久久国产| 啊啊啊在线观看免费视频| 久久精品人妻一区| 亚洲国产一区二区三区四区国产| 中文字幕后石码三区四区| 91蜜桃传媒精品久久久一区二区| 1024午夜激情男人的天堂| 99www.bibizy香蕉资源国产一区二区三区高清 | 韩日精品四区| 亚洲操人| 丁香五月天激情综合| 欧美精品第3页| 婷婷亚洲中文字幕在线| 色色色热| 久久精品视频久久久| 国产超碰在线一区| 久久国模av| 综合九九| 上床啊啊啊| av网站在线看| 综合国产影视三级| 日本在线视频导航| 丝袜六区| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊| 一区二区三区 丝袜高跟| 超碰午夜| 日韩视频中文字幕| 亚洲精品毛片在线观看| 亚洲人妻av| 欧美视频激情久久久久久| 欧洲精品久久| 亚洲91网| 天天干天天拍| 亚洲人人夜夜澡人人爽| 欧洲综合色图| 亚乱色| 啊啊啊好爽快点啊啊啊嗯嗯| 美女网站黄页| 久久久久久一日韩字幕无码| 色婷婷成人| 伦在线97| 日本成人在线不卡一区二区三区| 人人摸.人人色| 久久人妻丝袜一区二区三| 精品美女久久一二三| 亚洲综合97| 亚洲各类熟们中文字幕| 91精品国久久久久久无码| 色综91| 国产呦精品一区二区三区下载| 人人爱夜夜爱| 91麻豆天美| 国产不卡片| 欧美性暴力| 欧美人妻精品| 色波多| 69视频福利导航| 欧美日韩国产一区二区小黄片大全| 探花激情视频| 国产伊人精品在线| 五月丁香啪啪| 国产精品96久久久久久| 天天透伊人| 在线观看亚洲成人精品| 男人的天堂激情| 视频一区二区免费在线| 狠插 制服 自拍| 国产亚洲色婷婷久久99精品91 - 百度| 午夜婷婷| 最新日本中文字幕| 欧美日韩一干二干| 国产曰批免费观看久久久| 97bbn| 天天做天天爽| 欧美中文字幕日韩在线| 女人的天堂大香蕉网| 一区二区三区激情在线观看| 亚洲精品精品一区二区| 亚洲全色网| 啊啊啊啊啊在线视频| 欧美黄片免费在线观看视频| 丝袜美腿射精91| 少妇二级| 国产精选三级在线观看| 人人操人人摸人人骑| 日本999精品| 丝袜美腿诱惑亚洲欧美视频在线观看| 无码动漫av中文字幕| 亚洲情色综合网| av天堂影视中文在字幕在线中文 | 乱伦熟女区| 伊人热综合| 新怡红院| 亚洲少妇在线影音| 男人的天堂亚洲| 国产 热久久久久国产精品| 日韩啊V| 久久东京热久久| 色阁阁AV综合网| 美女毛片999| 清清一区二区三区四区不卡视频| 91欧美色| 久久久青青草| 91精品久久久久久久久久| 密臀在线免费观看| 国产丝袜美女诱惑| 99自拍视频| 亚洲AV无码国产精品久久久久 | 91熟女网| 超碰97人人乐| 极品美女嘿咻| 9久9久| 中文字幕日韩情色| 日韩射图| 天干天干天干天天做| 97鸡把在线视频| 欧美se综合| 日韩一级二级三级| 欧美天天射| 国产在线综合福利网站| 国产熟女无套内射| 亚洲久久久久| 九九视频黄色片| 丝袜剧情| 国产超碰在线| 婷婷色五月激情| 激情五月婷婷综合| 精品久久久无码| 插老姨肥穴| 天天射夜夜| 久热99999| 哈哈操 大香蕉| 亚洲电影中字一区二区| 中国探花熟女| 久久精品小视频| 97天天综合网| 伊人9| 热99这里有精品综合久久| 午夜男人av| 五月婷婷综合网| 久日91在线| 美女高潮国产高清| 久久成人午夜精品影院| 99色热| 大乔未久88一区| 日本色日夜干| 欧美在线观看综合国产| 国产精品91一样| 超碰9 7女人| 精品国产一区二区三区在线播出| 国产成人网站在线观看| 久久草视频污视频| 蜜臀中文字幕| 大香蕉亚洲中文| 91老妇女| 日本国产高清色www视频在线| 成人熟女视频一区二区三区| rivers-china.com| 国产AV激情无码久久无码| www.四虎在线| 精品亚洲天堂| 嗯嗯啊操我| 欧美九九九| 岛国黄色大片网站| 日日妻色网| 国产日产精品久久快鸭的功能介绍| 69超碰综合| 婷婷涩嫩草鲁丝久久午夜精品| 99热在线观看| 久草资源在线| 亚洲 欧美都市激情| 日韩97P| 97爱免费插| 国产精品麻豆成人av| 久久精品老司| 欧 美 自 拍 偷 拍| 色偷偷人人玩人人舔人人操人人摸人人爽| 黄人人操人人操| 亚州欧美一区| 翔田千里av一区二区三区| 校园激情狠狠四射| 欧美亚洲国内自拍| 18禁在线视频| 91丝袜在线视频| 国产伦精品一区二区三区在线观| 亚洲无码久久久久久久| 日韩本不卡视频在线观看 | 成人av性爱电影在线观看| 老熟妇一区二区三区啪啪| www网站黄| 翔田千里AV无码秘 三区| 97久久免费| 五月丁香久久| 成人无码电影在线观看网| 插插综合网天天影视网| 啊啊啊啊啊啊啊好爽不要| 欧美性爱中文字幕无线码| www.91视频网| 青女在线| 久久久久久久久久久97| 三级特黄60分钟播放| 天天干18禁| 青娱乐手机日韩在线视频| 国产这里只有精品| 人妻少妇av在线观看| 蜜臀一区二区三区在线| 精品人妻一二三四区视频| 熟妇熟女一区二三区| 国产尹人在线视频免费| 草莓精品视频在线免费观看| 精品999一区二区| 少妇高潮一区二区三区在线| 欧美韩国你懂得在线 | 91粉嫩萝控精品福利网站_精品影音先锋国 | 大乔未久88一区| 青青草大香蕉视频| 欧美亚州手机在线| 熟女人妇一区二区三区| 国产97在线 | 亚洲| 欧美在线综合| 中国黄色特级精品一区二区三区片| 色99视频| 99re9| 青青操97| 天美传媒国产原创中文字幕亚洲欧美另类| 中文字幕五月婷婷免费| 日本羞羞的视频在线播放| 日本肉体xxxx裸交| 亚洲精品国产精品乱码不99| 成人免费在线网站| 国产无马av| 五月天激情国产综合婷婷婷| 99热婷婷| 9 7超碰在线免费观看| 九九热在线精品视频| 9999久久久久| 狠狠爱大香蕉| 又大又长又粗又爽又黄| www.av在线视频| 不卡免费av在线播放| 伊人97超碰| 九九九九九九九九九九精品视频| 九九人妻| 中文字幕蜜乳av| 色官网色综合| 熟女精品一区二区三区| 97精品视频免费| 久久精品操| 欧美性爱18观看| 激情综合五月天| 啊啊啊啊二区好大| 欧美综合色图网| ji熟女.com| 九色97| 97在线日韩中文字幕| 欧美裸体美女日麻屄| 免费啪啪一级视频| 婷婷激情一区二区三区俺也去| 国产av色网| 性爱视频啪啪啪啪| 色狠狠综合噜一二三区| 中文字幕视频在线观看| 国语av最新自产拍在线观看| 美女的肌被草喷水视频| 黄页| 久久怡红院| 九色 蝌蚪 熟女自 | 老外又粗又长一晚做五次| 91久久久久久| 91男人综合| 口爆吞精在线观看| 日韩天堂av电影在线观看| 亚洲学生妹高清av| 亚州成人a∨| 电家庭影院午夜69久久夜色精品国产69乱| 欧美在线干| 2017天天操| 盗摄 精品 另类 一区| 欧美精品一二三| 婷婷三区| 日小BB小视频| 国产不卡的视频| 狠狠爱综合| 欧美性暴力猛交| 色五91| 午夜毛片亚洲精品片国产久久久| 日韩欧美视频青青| 国产精品露脸在线观看| 加勒比av中文| av九九| 性饥渴少妇av无码毛片| 自拍视频大全亚洲专媒视频/一区二区三区| 欧美牲| 人妻熟女一区二区三区在线| www.99中文字幕| 亚洲一区二区av| 色999偷自拍拍| 国产树林里野战在线看| 欧美一二三| 亚州春色| 6080yy午夜理论三级一区二区三区无码| 欧美亚洲中文字幕| 久久偷拍人| 殴美牲| 亚欧视频在线| 日本精品一级二级三级| 91久久精品美女高潮喷水| 婷婷五月天激情小说| 99亚洲精品| 超碰99在线| 亚洲天天影视色综合| 夜夜中出国产| 亚洲成人福利电影免费| 免费一级性爱久久| 欧美色视| 精品人妻久久久久一区二区三区| 欧美香蕉视xxx| 男人天堂2019亚洲| 大香蕉九九| 亚洲熟女av日韩熟女| 亚洲国产精品无码AV久久久| 91网站18禁| 男人天堂2030| 99999久久精| 日日AAvv| 久久久96精品| 亚洲日本天堂| 亚洲资源网| 天天色踪合| Aa东京男人的天堂| 亚洲风情综合网| 女生看匆91网站| 青草一区二区| 婷婷五月天激情四射| 97ai亚洲| 成年人黄色| 国产精品久久久啊| www.久久制服糖| 中文字幕aⅴ在线视频| 多乙久久久久久| 国产成人精品日本视频| 极品极品色影院| 久久综合五月天| 日韩中字av一区| 久草精品视频| 久久大香蕉97| 久久草草亚洲蜜桃臀| 亚洲五码一区二区三区| 免費黃色視頻觀看一| 男人天堂婷婷五月天校园春色| 久热精品色情| 亚洲高清少妇| 色色九区| 丰满少妇乱子伦精品无| 五月婷婷啪啪| 国产精品网站www| 午夜在线播放| 亚洲精品三区在线观看| 五月色综合| 狠狠干2020| 操逼视频国产无套| 中文字暮97| 91精品久久久久久| 精品国产三级av韩国在线 | 免费毛片在线播放| 熟女一区二区| 亚洲色交| 中文字幕av乱伦| 九九九九九九九九九九九九九九九女| 超碰色老头| 亚洲中文日韩精品| 伊人精品视频| 少妇高潮流水av免费| 天天做天天爽| 四虎精品永久在线观看| 免费a在线播放v| 人妻少妇精品久久久| 欧美日韩性爱电影在线| 爱干爱射网啊啊啊| 97AV在线观看| 99热这里只有精品9| 91色欧美| 日本欧美成人片AAAA| 天躁夜夜躁2021| 日韩AV片| 思思久热在线精品66| 久久天天摸| 超碰97人人cao| 日韩 成人 有码| 性爱综合一区二区| 丰满搜索结果 -第18页- 久久高清无码 | 亚洲精品97| 麻豆天美电影一区二区| 视频不卡中文字幕| 欧美日韩资源在线| 100啪啪视频大全| 加勒比综合九九99视频在线播放| 国产三级在线现体验区| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 草草影院最新网址| 国产视频小说| 人妻久久久| 狠狠久久手机视频精品| 91 国产丝袜在线播放-百度| 日本黄 R色 成 人网站| 中文字幕青青草| 九九热免费国产视频婷婷伊人五月| 粉嫩av在线| 亚洲凸凹超碰成人| 天天天天干| 性暴力欧美猛交在线直播| 九九超碰综合网| 日本一区二区三区欧美日韩中文字幕| 呦呦影院| 蜜臀久久99精品久久久久久酒店| 97亚洲资源| 久久曰曰| 国产懂色精品国产av| 自拍视频一区在线观看| 久久精品日韩| 清纯唯美亚洲综合| 色拍偷亚洲| 日逼五月天| 在线另类| JIZZJIZZ国产精品喷水| av爱爱爱| 特色a在线上| 日韩猛交| 国产夫妻性生活视频| 国产精品第二页| 九九九久久久久| 色爱欲亚洲| 久久9 9 9精品| 久妇网| 99精品视频在线观看| 久久久久久AⅤ无码免费肉站| 国产精品无码av在线| 亚洲AV成人无码一二三久久| 女生久久网| 九九九九热| 大二网站亚洲| 大香蕉www.超碰| AV一区观看| 超碰成人公开| 日韩中文字幕视频在线观看| 日韩无码专区|