std::set与std::vector在C++ STL中的区别
向量: 向量是类似动态数组的容器,具有在插入或删除新元素时调整大小的能力。它是标准模板库(STL)的模板,提供了程序的更大灵活性。向量的元素被放置在连续的存储器中,并使用迭代器遍历。
例子:
vector <int> v;
v.push_back(1);
v.push_back(2);
v.clear();
下面是在C++中使用向量的实现:
// C++ program to demonstrate the
// working of vector in cpp
#include <bits/stdc++.h>
using namespace std;
// Driver Code
int main()
{
vector<int> v;
// Inserting elements in vector
v.push_back(11);
v.push_back(6);
v.push_back(12);
v.push_back(0);
v.push_back(0);
// Elements are stored in the
// order of insertion with the
// duplicate element
cout << "Elements in vector are:\n";
for (auto it : v) {
cout << it << " ";
}
return 0;
}
输出:
Elements in vector are:
11 6 12 0 0
时间复杂度:O(N)//对于N次插入
辅助空间:O(1)
集: 集也是标准模板库(STL)的模板之一。它是一个唯一元素的容器,一旦添加到集中,其值就不能被修改,但可以删除或插入。集合的元素总是以排序形式存储。
例子:
set <int> s;
s.insert(1);
s.insert(12);
int key = 1;
s.erase(key);
下面是在C++中使用集的实现:
// C++ program to demonstrate the
// working of set in c++
#include <bits/stdc++.h>
using namespace std;
// Driver Code
int main()
{
set<int> s;
// Insert elements into the set
s.insert(11);
s.insert(6);
s.insert(12);
s.insert(0);
// Duplicate elements
s.insert(0);
cout << "Elements in set:\n";
// The inserted elements get sorted
// Print the elements of the set
for (auto it : s) {
cout << it << " ";
}
return 0;
}
输出:
Elements in set:
0 6 11 12
时间复杂度:O(Nlog N)//对于N次插入
辅助空间:O(1)
向量和集之间的表格差异:
向量 | 集 |
---|---|
向量的元素是未排序的。 | 集的元素总是排序的。 |
它可以包含重复元素。 | 它只包含唯一元素。 |
向量是无序的。 | 集是有序的。 |
插入新元素的时间复杂度为O(1)。 | 插入新元素的时间复杂度为O(log N)。 |
向量在容器末尾插入和删除元素速度更快。 | 集合在容器中间插入和删除元素速度更快。 |