欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

?C++中assign函數(shù)的使用

 更新時間:2025年07月14日 10:39:32   作者:紅石程序員  
在C++標準模板庫中,std::list等容器都提供了assign成員函數(shù),它比操作符更靈活,支持多種初始化方式,下面就來介紹一下assign的用法,具有一定的參考價值,感興趣的可以了解一下

?在 C++ 標準模板庫(STL)中,std::vector、std::string、std::list 等容器都提供了 assign 成員函數(shù),用于重新分配容器內(nèi)容。它比 = 操作符更靈活,支持多種初始化方式。本文將詳細介紹 assign 的用法、性能分析及適用場景。

?1.assign的基本功能?

assign 的主要作用是:

  1. ?清空容器?:移除所有現(xiàn)有元素。
  2. ?重新填充?:用指定的新內(nèi)容替換原有數(shù)據(jù)。

?語法

void assign(size_type count, const T& value);  // (1) 填充 n 個相同值
void assign(InputIt first, InputIt last);       // (2) 用迭代器范圍賦值
void assign(std::initializer_list<T> ilist);    // (3) 用初始化列表賦值

?2. 具體用法示例?

??(1) 填充n個相同值

std::vector<int> vec;
vec.assign(5, 100);  // 填充 5 個 100
// vec = {100, 100, 100, 100, 100}

??(2) 用迭代器范圍賦值

std::list<int> source = {1, 2, 3, 4, 5};
std::vector<int> vec;
vec.assign(source.begin(), source.end());  // 復制 list 的內(nèi)容
// vec = {1, 2, 3, 4, 5}

??(3) 用初始化列表{...}賦值

std::vector<int> vec;
vec.assign({10, 20, 30});  // 直接賦值初始化列表
// vec = {10, 20, 30}

3.assignvsoperator=

操作功能適用場景
assign支持多種初始化方式(迭代器、初始化列表、填充值)需要動態(tài)調(diào)整容器內(nèi)容時
operator=僅支持直接賦值(= 或初始化列表)簡單賦值時

?示例對比:?

std::vector<int> vec1, vec2;

// 用 assign 賦值
vec1.assign({1, 2, 3});  // 支持初始化列表

// 用 = 賦值
vec2 = {1, 2, 3};        // 僅 C++11 及以上支持

?4. 性能分析?

  • ?時間復雜度?:O(n)(n 為新元素的數(shù)量)
  • ?與 clear() + push_back() 的對比?:
    • assign 更高效,因為它是批量操作,而 push_back 可能觸發(fā)多次內(nèi)存重分配。
  • ?適用場景?:
    • 需要完全替換容器內(nèi)容時(如從文件/數(shù)據(jù)庫加載新數(shù)據(jù))。
    • 需要從其他容器復制數(shù)據(jù)時(如 std::list → std::vector)。

5. 其他容器的assign

std::string str;
str.assign(5, 'A');  // "AAAAA"

std::list<int> lst;
lst.assign({10, 20, 30});  // {10, 20, 30}

?6. 實際應用場景?

??(1) 動態(tài)更新容器內(nèi)容

std::vector<int> loadDataFromDatabase() {
    // 模擬從數(shù)據(jù)庫讀取數(shù)據(jù)
    return {101, 102, 103, 104};
}

int main() {
    std::vector<int> cache;
    cache.assign(loadDataFromDatabase().begin(), loadDataFromDatabase().end());
    // cache = {101, 102, 103, 104}
}

??(2) 清空并重新填充

std::vector<std::string> logs;

// 清空舊日志,加載新日志
logs.assign({"Error: 404", "Warning: Low memory", "Info: Session started"});

?7. 總結?

特性說明
?功能?清空容器并用新內(nèi)容替換
?靈活性?支持迭代器、初始化列表、填充值
?性能?O(n),比 clear() + push_back() 更高效
?適用容器?std::vector, std::string, std::list, std::deque 等

?推薦使用場景?:

  • 需要完全替換容器內(nèi)容時。
  • 需要從其他容器復制數(shù)據(jù)時。
  • 需要高效初始化大量相同值(如 vec.assign(1000, 0))。

?8. 進一步思考?

  • ?assign 和 resize 的區(qū)別:resize 只調(diào)整大小,不改變原有數(shù)據(jù)(除非縮?。?。
  • ?assign 和 insert 的區(qū)別:insert 是在指定位置插入,而 assign 是先清空再填充。

到此這篇關于?C++中assign函數(shù)的使用的文章就介紹到這了,更多相關?C++ assign函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • C++實現(xiàn)簡單職工管理系統(tǒng)

    C++實現(xiàn)簡單職工管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++職工管理系統(tǒng)實訓代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • C++動態(tài)調(diào)用動態(tài)鏈接庫(DLL或SO)的方法實現(xiàn)

    C++動態(tài)調(diào)用動態(tài)鏈接庫(DLL或SO)的方法實現(xiàn)

    動態(tài)鏈接庫是一種Windows操作系統(tǒng)下常見的可執(zhí)行文件格式,它包含了一些可被其他應用程序調(diào)用的函數(shù)和數(shù)據(jù),本文主要介紹了C++動態(tài)調(diào)用動態(tài)鏈接庫(DLL或SO),感興趣的可以了解一下
    2024-01-01
  • C語言實現(xiàn)順序表的基本操作指南(注釋很詳細)

    C語言實現(xiàn)順序表的基本操作指南(注釋很詳細)

    線性表是最簡單的數(shù)據(jù)結構,而順序表又是最簡單的線性表,其基本思想是用一段地址連續(xù)的儲存單元依次存儲線性表的數(shù)據(jù)元素,下面這篇文章主要給大家介紹了關于C語言實現(xiàn)順序表的基本操作,需要的朋友可以參考下
    2021-10-10
  • C++中的六個函數(shù)

    C++中的六個函數(shù)

    本文給大家介紹了C++中的六個函數(shù),非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-05-05
  • C++使用適配器模式模擬實現(xiàn)棧和隊列

    C++使用適配器模式模擬實現(xiàn)棧和隊列

    不論是C語言還是C++,我們都用其對應的傳統(tǒng)寫法對棧和隊列進行了模擬實現(xiàn),現(xiàn)在我們要用新的方法模擬實現(xiàn)棧和隊列,這個新方法就是適配器模式,文章通過代碼示例和圖文介紹的非常詳細,需要的朋友可以參考下
    2024-12-12
  • C++輸入流和輸出流 超級詳細

    C++輸入流和輸出流 超級詳細

    C++ 的開發(fā)者認為數(shù)據(jù)輸入和輸出的過程也是數(shù)據(jù)傳輸?shù)倪^程,數(shù)據(jù)像水一樣從一個地方流動到另一個地方,所以 C++ 中將此過程稱為“流”,實現(xiàn)此過程的類稱為“流類”。下面小編將詳細介紹這個話題,需要的朋友可以參考一下
    2021-09-09
  • 詳解C++中賦值和輸入輸出語句的用法

    詳解C++中賦值和輸入輸出語句的用法

    這篇文章主要介紹了詳解C++中賦值和輸入輸出語句的用法,是C++入門學習中的基礎知識,需要的朋友可以參考下
    2015-09-09
  • vector, list, map在遍歷時刪除符合條件的元素實現(xiàn)方法

    vector, list, map在遍歷時刪除符合條件的元素實現(xiàn)方法

    下面小編就為大家?guī)硪黄獀ector, list, map在遍歷時刪除符合條件的元素實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C語言SetConsoleCursorInfo函數(shù)使用方法

    C語言SetConsoleCursorInfo函數(shù)使用方法

    這篇文章介紹了C語言SetConsoleCursorInfo函數(shù)的使用方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • c語言的指針數(shù)組詳解

    c語言的指針數(shù)組詳解

    這篇文章主要為大家介紹了c語言的指針數(shù)組,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12

最新評論