最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

?在 C++ 標(biāo)準(zhǔn)模板庫(STL)中,std::vector、std::string、std::list 等容器都提供了 assign 成員函數(shù),用于重新分配容器內(nèi)容。它比 = 操作符更靈活,支持多種初始化方式。本文將詳細(xì)介紹 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());  // 復(fù)制 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. 性能分析?

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

??(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. 總結(jié)?

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

?推薦使用場景?:

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

?8. 進(jìn)一步思考?

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

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

相關(guān)文章

最新評論

田东县| 五华县| 定南县| 佛学| 平泉县| 东兴市| 阳春市| 瑞丽市| 尼勒克县| 林州市| 黄平县| 台东县| 霍林郭勒市| 红安县| 龙州县| 武威市| 克拉玛依市| 成安县| 南皮县| 凤城市| 法库县| 海门市| 铜鼓县| 花莲市| 丰城市| 额敏县| 成武县| 舒城县| 昭通市| 自治县| 铜山县| 墨江| 高陵县| 丹阳市| 南宫市| 钟祥市| 南安市| 正安县| 建阳市| 花垣县| 双辽市|