c++標準函式庫的std::vector
基本用法如下。
Vector可以看作是array的加強版,一樣以連續的記憶體空間儲存多個有序的元素;長度是可動態增長的;支援泛型,即可儲存任意型態的元素。讀取為隨機存取時間複雜度O(1)
;新增刪除時間複雜度O(n)
。
範例環境:
- macOS BigSur vesion 11.4
- Apple clang version 12.0.0
使用vector
要匯入標頭檔vector
,所在的命名空間為std
。例如下面宣告一個vector
變數v
。
main.cpp
#include <vector>
using namespace std;
int main() {
vector<int> v;
return 0;
}
或在宣告時設定元素,不過此語法要C++11以上編譯。
main.cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3};
return 0;
}
vector
可使用push_back()
將資料放在尾端。
main.cpp
#include <vector>
using namespace std;
int main() {
vector<int> v; // {}
v.push_back(1); // {1}
v.push_back(2); // {1, 2}
v.push_back(3); // {1, 2, 3}
return 0;
}
使用size()
取得元素個數。
main.cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
cout << v.size() << endl; // 3
return 0;
}
可以方括弧[]
以索引取得元素;或用方法at()
以索引取得元素,差別在會做邊界檢查,若索引超過範圍會拋出out_of_range
錯誤。
main.cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
cout << v[0] << endl; // 1
cout << v.at(1) << endl; // 2
cout << v[100] << endl; // 0
cout << v.at(100) << endl; // terminating with uncaught exception of type std::out_of_range: vector
return 0;
}
使用empty()
檢查vector是否為空。
main.cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
cout << v.empty() << endl; // 0 (false)
return 0;
}
使用clear()
清空內容。
main.cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.clear();
cout << v.empty() << endl; // 1 (true)
return 0;
}
使用pop_back
移除尾端的元素。
main.cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.pop_back();
cout << v.size() << endl; // 2
return 0;
}
使用for loop迴圈遍歷vector。
main.cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
for (int i = 0; i < v.size() ; i++) {
cout << v[i] << endl;
}
return 0;
}
或用C++ 11才有的Range-based for loop。
main.cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
for(auto &e : v) {
cout << e << endl;
}
return 0;
}
執行印出以下:
1
2
3
沒有留言:
張貼留言