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

C++中std::vector的具體使用

 更新時(shí)間:2025年02月18日 09:53:42   作者:木宇(記得熱愛(ài)生活)  
C++標(biāo)準(zhǔn)庫(kù)中的std::vector是一種動(dòng)態(tài)數(shù)組容器,適用于算法競(jìng)賽中的動(dòng)態(tài)數(shù)據(jù)存儲(chǔ)、數(shù)組擴(kuò)展和模擬棧/二維數(shù)組等場(chǎng)景,本文就來(lái)介紹一下,感興趣的可以了解一下

在 C++ 標(biāo)準(zhǔn)庫(kù)中,std::vector 是一個(gè)動(dòng)態(tài)數(shù)組類(lèi)。相較于靜態(tài)數(shù)組,std::vector 能夠根據(jù)需求自動(dòng)擴(kuò)展或縮小,非常適合在算法競(jìng)賽中使用。在藍(lán)橋杯比賽中,std::vector 常用于存儲(chǔ)動(dòng)態(tài)數(shù)據(jù)、處理數(shù)組擴(kuò)展問(wèn)題,甚至可以代替二維數(shù)組以簡(jiǎn)化代碼。

1. std::vector 的基礎(chǔ)概念

std::vector 是一種動(dòng)態(tài)數(shù)組容器,可以根據(jù)需要?jiǎng)討B(tài)調(diào)整大小。其底層實(shí)現(xiàn)是連續(xù)的內(nèi)存塊,能夠支持隨機(jī)訪問(wèn)(即通過(guò)索引訪問(wèn)元素)。與普通數(shù)組相比,它不僅支持增刪操作,還能自動(dòng)擴(kuò)展容量,從而更靈活。

std::vector 的內(nèi)部機(jī)制std::vector 的動(dòng)態(tài)擴(kuò)展機(jī)制基于 容量(capacity) 的概念。vector 會(huì)在內(nèi)部維護(hù)一個(gè)預(yù)分配的內(nèi)存塊以存儲(chǔ)元素。當(dāng)容量不足時(shí),vector 會(huì)自動(dòng)擴(kuò)展為原來(lái)的 1.5 倍或 2 倍,從而減少頻繁分配內(nèi)存的開(kāi)銷(xiāo)。

2. 創(chuàng)建 std::vector

在創(chuàng)建 std::vector 時(shí),可以通過(guò)不同的方式初始化它:

3. 動(dòng)態(tài)擴(kuò)展和容量管理

3.1 動(dòng)態(tài)擴(kuò)展

當(dāng)使用 push_back() 向 vector 中添加元素時(shí),如果容量不夠,vector 會(huì)自動(dòng)分配更多的內(nèi)存,重新拷貝現(xiàn)有元素,從而擴(kuò)展容量。

std::vector<int> vec;
for (int i = 0; i < 10; i++) {
    vec.push_back(i);
    std::cout << "Size: " << vec.size() << ", Capacity: " << vec.capacity() << std::endl;
}

3.2 手動(dòng)管理容量

如果預(yù)先知道 vector 大小,可以使用 reserve() 函數(shù)來(lái)分配內(nèi)存,從而避免多次擴(kuò)展的性能開(kāi)銷(xiāo):

std::vector<int> vec;
vec.reserve(10); // 預(yù)分配容量為10
for (int i = 0; i < 10; i++) {
    vec.push_back(i);
}

4. 常用操作和方法

4.1添加和刪除元素

  • push_back(): 在末尾添加元素
  • pop_back(): 刪除末尾元素
  • insert(): 在指定位置插入元素
  • erase(): 刪除指定位置的元素
  • clear(): 清空所有元素
std::vector<int> vec = {1, 2, 3, 4, 5};
vec.push_back(6); // {1, 2, 3, 4, 5, 6}
vec.pop_back();   // {1, 2, 3, 4, 5}
vec.insert(vec.begin() + 2, 10); // {1, 2, 10, 3, 4, 5}
vec.erase(vec.begin() + 2); // {1, 2, 3, 4, 5}
vec.clear(); // 清空所有元素,size 為 0

4.2 訪問(wèn)元素

  • 隨機(jī)訪問(wèn):可以使用索引訪問(wèn) vector 中的元素。
  • 邊界檢查:使用 at() 方法可以提供越界檢查,防止非法訪問(wèn)。
std::vector<int> vec = {1, 2, 3, 4, 5};
std::cout << vec[0] << std::endl;   // 輸出: 1
std::cout << vec.at(1) << std::endl; // 輸出: 2,帶邊界檢查

4.3 迭代器遍歷

可以使用迭代器來(lái)遍歷 vector。使用 begin() 和 end() 可以獲取 vector 的首尾位置。

std::vector<int> vec = {1, 2, 3, 4, 5};
for (auto it = vec.begin(); it != vec.end(); ++it) {
    std::cout << *it << " ";
}
std::cout << std::endl;

5. std::vector 在競(jìng)賽中的應(yīng)用場(chǎng)景

5.1 動(dòng)態(tài)數(shù)據(jù)存儲(chǔ)

在算法競(jìng)賽中,我們常常需要存儲(chǔ)未知數(shù)量的數(shù)據(jù)。例如,讀取輸入數(shù)據(jù)時(shí),std::vector 可以輕松地進(jìn)行動(dòng)態(tài)擴(kuò)展:

int n;
std::cin >> n;
std::vector<int> data;

for (int i = 0; i < n; i++) {
    int x;
    std::cin >> x;
    data.push_back(x);
}

// 輸出所有數(shù)據(jù)
for (int x : data) {
    std::cout << x << " ";
}

5.2 模擬棧結(jié)構(gòu)

std::vector 提供的 push_back() 和 pop_back() 操作,與棧的數(shù)據(jù)結(jié)構(gòu)操作類(lèi)似,因此可以用 vector 模擬棧來(lái)解決括號(hào)匹配等問(wèn)題。

std::string s = "((()))";
std::vector<char> stack;

for (char c : s) {
    if (c == '(') {
        stack.push_back(c);
    } else if (!stack.empty() && stack.back() == '(') {
        stack.pop_back();
    }
}

if (stack.empty()) {
    std::cout << "匹配成功!" << std::endl;
} else {
    std::cout << "匹配失??!" << std::endl;
}

5.3 模擬二維數(shù)組

在圖的算法中,可以用 std::vector<std::vector> 來(lái)表示鄰接矩陣。以下是一個(gè)示例:

int n = 5; // 頂點(diǎn)個(gè)數(shù)
std::vector<std::vector<int>> graph(n, std::vector<int>(n, 0));

// 添加邊
graph[0][1] = 1;
graph[1][2] = 1;
graph[2][3] = 1;
graph[3][4] = 1;

// 輸出鄰接矩陣
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        std::cout << graph[i][j] << " ";
    }
    std::cout << std::endl;
}

6.注意事項(xiàng)

  • 性能優(yōu)化:頻繁的動(dòng)態(tài)擴(kuò)展可能會(huì)導(dǎo)致性能下降??梢栽谝阎笮〉那闆r下提前 reserve() 容量。
  • 邊界檢查:at() 提供了安全訪問(wèn),但如果對(duì)性能要求高,可以直接使用 [] 操作符。
  • 二維 vector:在圖的算法中,盡量選擇合適的數(shù)據(jù)結(jié)構(gòu)以提高代碼效率。

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

相關(guān)文章

  • QT編寫(xiě)tcp通信工具(Server端)

    QT編寫(xiě)tcp通信工具(Server端)

    這篇文章主要為大家詳細(xì)介紹了QT編寫(xiě)tcp通信工具,一個(gè)類(lèi)似網(wǎng)上常見(jiàn)的網(wǎng)絡(luò)調(diào)試工具,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++深入探究list的模擬實(shí)現(xiàn)

    C++深入探究list的模擬實(shí)現(xiàn)

    list相較于vector來(lái)說(shuō)會(huì)顯得復(fù)雜,它的好處是在任意位置插入,刪除都是一個(gè)O(1)的時(shí)間復(fù)雜度,本文主要介紹了C++中List的模擬實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • OpenMP task construct 實(shí)現(xiàn)原理及源碼示例解析

    OpenMP task construct 實(shí)現(xiàn)原理及源碼示例解析

    這篇文章主要為大家介紹了OpenMP task construct 實(shí)現(xiàn)原理及源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • DHCP:解析開(kāi)發(fā)板上動(dòng)態(tài)獲取ip的2種實(shí)現(xiàn)方法詳解

    DHCP:解析開(kāi)發(fā)板上動(dòng)態(tài)獲取ip的2種實(shí)現(xiàn)方法詳解

    本篇文章是對(duì)開(kāi)發(fā)板上動(dòng)態(tài)獲取ip的2種實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Qt實(shí)現(xiàn)UI界面純代碼示例

    Qt實(shí)現(xiàn)UI界面純代碼示例

    這篇文章主要給大家介紹了關(guān)于Qt實(shí)現(xiàn)UI界面的相關(guān)資料,使用Qt純代碼,實(shí)現(xiàn)了基本的界面,對(duì)大家學(xué)習(xí)或者使用Qt具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01
  • C++設(shè)計(jì)模式之抽象工廠模式

    C++設(shè)計(jì)模式之抽象工廠模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之抽象工廠模式,本文要講的抽象工廠模式,就是工廠方法模式的擴(kuò)展和延伸,需要的朋友可以參考下
    2014-09-09
  • C語(yǔ)言strlen和sizeof在數(shù)組中的使用詳解

    C語(yǔ)言strlen和sizeof在數(shù)組中的使用詳解

    對(duì)于 strlen 和 sizeof,相信不少程序員會(huì)混淆其功能。雖然從表面上看它們都可以求字符串的長(zhǎng)度,但二者卻存在著許多不同之處及本質(zhì)區(qū)別
    2021-10-10
  • C++基于隨機(jī)數(shù)實(shí)現(xiàn)福彩雙色球的方法示例

    C++基于隨機(jī)數(shù)實(shí)現(xiàn)福彩雙色球的方法示例

    這篇文章主要介紹了C++基于隨機(jī)數(shù)實(shí)現(xiàn)福彩雙色球的方法,結(jié)合完整實(shí)例形式分析了C++隨機(jī)數(shù)算法的實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下
    2017-06-06
  • C++實(shí)現(xiàn)簡(jiǎn)單BP神經(jīng)網(wǎng)絡(luò)

    C++實(shí)現(xiàn)簡(jiǎn)單BP神經(jīng)網(wǎng)絡(luò)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡(jiǎn)單BP神經(jīng)網(wǎng)絡(luò),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C++實(shí)現(xiàn)并行計(jì)算的兩種方式

    C++實(shí)現(xiàn)并行計(jì)算的兩種方式

    本文介紹了使用C++實(shí)現(xiàn)并行計(jì)算的兩種方式,包括OpenMP和MPI,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03

最新評(píng)論

吉木乃县| 静海县| 女性| 甘肃省| 福建省| 旬邑县| 永州市| 峨眉山市| 迁安市| 乡宁县| 永年县| 体育| 清水河县| 米泉市| 安西县| 阳山县| 长海县| 化隆| 盐源县| 安化县| 贵德县| 旅游| 乐山市| 密山市| 彩票| 元阳县| 屯留县| 清原| 招远市| 比如县| 伊宁市| 东乡县| 政和县| 历史| 澎湖县| 马关县| 墨玉县| 崇左市| 全州县| 湄潭县| 宁晋县|