當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C++ vector erase()、clear()用法及代碼示例


向量與動態數組相同,具有在插入或刪除元素時自動調整自身大小的能力,並且容器自動處理其存儲。

vector::clear()

clear()函數用於刪除向量容器的所有元素,從而使其大小為0。
用法:

vectorname.clear()
參數:
No parameters are passed.
Result:
All the elements of the vector are
removed ( or destroyed )

例子:


Input :myvector= {1, 2, 3, 4, 5};
         myvector.clear();
Output:myvector= {}

Input :myvector= {};
         myvector.clear();
Output:myvector= {}

錯誤和異常

1.它沒有異常拋出保證。
2.傳遞參數時顯示錯誤。

// CPP program to illustrate 
// Implementation of clear() function 
#include <iostream> 
#include <vector> 
using namespace std; 
  
int main() 
{ 
    vector<int> myvector; 
    myvector.push_back(1); 
    myvector.push_back(2); 
    myvector.push_back(3); 
    myvector.push_back(4); 
    myvector.push_back(5); 
  
    // Vector becomes 1, 2, 3, 4, 5 
  
    myvector.clear(); 
    // vector becomes empty 
  
    // Printing the vector 
    for (auto it = myvector.begin(); it != myvector.end(); ++it) 
        cout << ' ' << *it; 
    return 0; 
}

輸出:

No Output

時間複雜度:上)
所有元素都被一一摧毀。

vector::erase()

erase()函數用於從指定位置或範圍中刪除容器中的元素。

用法:

1. vectorname.erase(position)
2. vectorname.erase(startingposition, endingposition)
參數:
Position of the element to be removed in the form of iterator.
or the range specified using start and end iterator.
Result:
Elements are removed from the specified
position of the container.

例子:

Input :myvector= {1, 2, 3, 4, 5}, iterator= 2
         myvector.erase(iterator);
Output:1, 2, 4, 5

Input :myvector= {1, 2, 3, 4, 5, 6, 7, 8}, iterator1= 3, iterator2= 6
         myvector.erase(iterator1, iterator2);
Output:1, 2, 3, 7, 8

錯誤和異常

1.如果位置有效,則沒有異常拋出保證。
2.否則顯示未定義的行為。

從特定位置移除元件


// CPP program to illustrate 
// working of erase() function 
#include <iostream> 
#include <vector> 
using namespace std; 
  
int main() 
{ 
    vector<int> myvector{ 1, 2, 3, 4, 5 }; 
    vector<int>::iterator it; 
  
    it = myvector.begin(); 
    myvector.erase(it); 
  
    // Printing the Vector 
    for (auto it = myvector.begin(); it != myvector.end(); ++it) 
        cout << ' ' << *it; 
    return 0; 
}

輸出:

2 3 4 5

刪除範圍內的元素

// CPP program to illustrate 
// Implementation of erase() function 
#include <iostream> 
#include <vector> 
using namespace std; 
  
int main() 
{ 
    vector<int> myvector{ 1, 2, 3, 4, 5 }; 
    vector<int>::iterator it1, it2; 
  
    it1 = myvector.begin(); 
    it2 = myvector.end(); 
    it2--; 
    it2--; 
  
    myvector.erase(it1, it2); 
  
    // Printing the Vector 
    for (auto it = myvector.begin(); it != myvector.end(); ++it) 
        cout << ' ' << *it; 
    return 0; 
}

輸出:

4 5

應用
給定一個整數列表,從向量中刪除所有偶數元素並打印該向量。

Input :1, 2, 3, 4, 5, 6, 7, 8, 9
Output:1 3 5 7 9
Explanation - 2, 4, 6 and 8 which are even are erased from the vector

算法
1.循環運行直至向量大小。
2.檢查每個位置的元素是否可被2整除,如果是,則刪除該元素並遞減迭代器。
3.打印最終向量。

// CPP program to illustrate 
// Application of erase() function 
#include <iostream> 
#include <vector> 
using namespace std; 
  
int main() 
{ 
    vector<int> myvector{ 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 
  
    for (auto i = myvector.begin(); i != myvector.end(); ++i) { 
        if (*i % 2 == 0) { 
            myvector.erase(i); 
            i--; 
        } 
    } 
  
    // Printing the vector 
    for (auto it = myvector.begin(); it != myvector.end(); ++it) 
        cout << ' ' << *it; 
    return 0; 
}

輸出:

1 3 5 7 9

時間複雜度:最壞情況是刪除第一個元素時為O(N),最壞情況是刪除最後一個元素時為O(1)。

clear()和erase(),什麽時候使用?

clear()從向量容器中刪除所有元素,從而使其大小為0。使用clear()函數刪除向量中的所有元素。
erase()另一方麵,“函數”用於從容器中刪除特定元素或從容器中刪除一係列元素,從而通過刪除元素的數量來減小其大小。



相關用法


注:本文由純淨天空篩選整理自AyushSaxena大神的英文原創作品 vector erase() and clear() in C++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。