c语言 做网站,青岛公司建站,美术馆展厅设计方案,赌求网站开发点击蓝字关注我们来源于网络#xff0c;侵删1.vectorvector 是顺序容器的一种#xff0c;是可变长的动态数组#xff0c;支持随机访问迭代器#xff0c;所有stl算法都能对 vector 进行操作。vector 容器在实现时#xff0c;动态分配的存储空间一般都大于存放元素所需的空间…点击蓝字关注我们来源于网络侵删1.vectorvector 是顺序容器的一种是可变长的动态数组支持随机访问迭代器所有stl算法都能对 vector 进行操作。vector 容器在实现时动态分配的存储空间一般都大于存放元素所需的空间。例如哪怕容器中只有一个元素也会分配 32 个元素的存储空间。这样做的好处是在尾部添加一个新元素时不必重新分配空间直接将新元素写入适当位置即可。在这种情况下添加新元素的时间也是常数。但是多出来的空间用完再添加新元素就不得不重新分配内存空间把原有内容复制过去后再添加新的元素。#include iostream
#include vector //使用vector需要包含此头文件
using namespace std;
template class T
void PrintVector(const vector T v)
{ //用于输出vector容器的全部元素的函数模板typename vector T::const_iterator i;//typename 用来说明 vector T::const_iterator 是一个类型在 Visual Studio 中不写也可以for (i v.begin(); i ! v.end(); i)cout *i ;cout endl;
}
int main()
{int a[5] { 1, 2, 3, 4, 5 };vector int v(a, a 5); //将数组a的内容放入vcout 1) v.end() - v.begin() endl; //两个随机迭代器可以相减输出1)5cout 2); PrintVector(v); //输出2)1 2 3 4 5v.insert(v.begin() 2, 13); //在 begin()2 位置插人 13cout 3); PrintVector(v); //输出3)1 2 13 3 4 5v.erase(v.begin() 2); //删除位于 begin()2 位置的元素cout 4); PrintVector(v); //输出4)1 2 3 4 5vectorint v2(4, 100); //v2 有 4 个元素都是 100v2.insert(v2.begin(), v.begin() 1, v.begin() 3); //将v的一段插入v2开头cout 5)v2:; PrintVector(v2); //输出5)v2:2 3 100 100 100 100v.erase(v.begin() 1, v.begin() 3); //删除 v 上的一个区间即 [2,3)cout 6); PrintVector(v); //输出6)1 4 5return 0;
}#include iostream
#include vector
using namespace std;
int main()
{ vectorvectorint v(3); //v有3个元素每个元素都是vectorint 容器for(int i 0;i v.size(); i)for(int j 0; j 4; j)v[i].push_back(j);for(int i 0;i v.size(); i) {for(int j 0; j v[i].size(); j)cout v[i][j] ;cout endl;}return 0;
}2.listlist 是顺序容器的一种。list 是一个双向链表。使用 list 需要包含头文件 list。双向链表的每个元素中都有一个指针指向后一个元素也有一个指针指向前一个元素。list 容器不支持根据下标随机存取元素。list 的构造函数和许多成员函数的用法都与 vector 类似此处不再列举。除了顺序容器都有的成员函数外list 还独有如下函数STL 中的算法 sort 可以用来对 vector 和 deque 排序它需要随机访问迭代器的支持。因为 list 不支持随机访问迭代器所以不能用算法 sort 对 list 容器排序。因此list 容器引入了 sort 成员函数以完成排序。#include list //使用 list 需要包含此头文件
#include iostream
#include algorithm //使用STL中的算法需要包含此头文件
using namespace std;
class A {
private: int n;
public:A(int n_) { n n_; }friend bool operator (const A a1, const A a2);friend bool operator (const A a1, const A a2);friend ostream operator (ostream o, const A a);
};
bool operator (const A a1, const A a2) {return a1.n a2.n;
}
bool operator (const A a1, const A a2) {return a1.n a2.n;
}
ostream operator (ostream o, const A a) {o a.n;return o;
}
template class T
void Print(T first, T last)
{for (; first ! last; first)cout *first ;cout endl;
}
int main()
{A a[5] { 1, 3, 2, 4, 2 };A b[7] { 10, 30, 20, 30, 30, 40, 40 };listA lst1(a, a 5), lst2(b, b 7);lst1.sort();cout 1); Print(lst1.begin(), lst1.end()); //输出1)1 2 2 3 4lst1.remove(2); //删除所有和A(2)相等的元素cout 2); Print(lst1.begin(), lst1.end()); //输出2)1 3 4lst2.pop_front(); //删除第一个元素cout 3); Print(lst2.begin(), lst2.end()); //输出3)30 20 30 30 40 40lst2.unique(); //删除所有和前一个元素相等的元素cout 4); Print(lst2.begin(), lst2.end()); //输出4)30 20 30 40lst2.sort();lst1.merge(lst2); //合并 lst2 到 lst1 并清空 lst2cout 5); Print(lst1.begin(), lst1.end()); //输出5)1 3 4 20 30 30 40cout 6); Print(lst2.begin(), lst2.end()); //lst2是空的输出6)lst1.reverse(); //将 lst1 前后颠倒cout 7); Print(lst1.begin(), lst1.end()); //输出 7)40 30 30 20 4 3 1lst2.insert(lst2.begin(), a 1, a 4); //在 lst2 中插入 3,2,4 三个元素list A::iterator p1, p2, p3;p1 find(lst1.begin(), lst1.end(), 30);p2 find(lst2.begin(), lst2.end(), 2);p3 find(lst2.begin(), lst2.end(), 4);lst1.splice(p1, lst2, p2, p3); //将[p2, p3)插入p1之前并从 lst2 中删除[p2,p3)cout 8); Print(lst1.begin(), lst1.end()); //输出8)40 2 30 30 20 4 3 1cout 9); Print(lst2.begin(), lst2.end()); //输出9)3 4return 0;
}3.栈stack 是容器适配器的一种。要使用 stack必须包含头文件 stack。stack就是“栈”。是一种后进先出的元素序列访问、添加和删除都只能对栈顶的元素行。栈内的元素不能访问。stack的定义如下template class T, class Cont deque T
class stack{...
};第二个参数表明在默认情况下stack 就是用 deque 实现的。当然也可以指定用 vector 或 list 实现。虽然 stack 使用顺序容器实现但它不提供顺序容器具有的成员函数。除了 size、 empty 这两个所有容器都有的成员函数外stack 还有以下三个成员函数#include iostream
#include stack //使用stack需要包含此头文件
using namespace std;
int main()
{int n, k;stack int stk;cin n k; //将n转换为k进制数if (n 0) {cout 0;return 0;}while (n) {stk.push(n%k);n / k;}while (!stk.empty()) {cout stk.top();stk.pop();}return 0;
}4.queuequeue 就是“队列”。队列是先进先出的。队头的访问和删除操作只能在队头进行添加操作只能在队尾进行。不能访问队列中间的元素。queue 可以用 list 和 deque 实现默认情况下用 deque 实现。queue 的定义如下template class T, class Cont dequeT
class queue{...
};queue 同样也有和 stack 类似的 push、pop、top 函数。区别在于queue 的 push 发生在队尾pop 和 top 发生在队头。5.priority_queuepriority_queue 是“优先队列”。它和普通队列的区别在于优先队列的队头元素总是最大的——即执行 pop 操作时删除的总是最大的元素执行 top 操作时返回的是最大元素的引用。priority_queue 可以用 vector 和 deque 实现默认情况下用 vector 实现。priority_queue 默认的元素比较器是 less T。也就是说在默认情况下要放入 priority_queue 的元素必须是能用“”运算符进行比较的而且 priority _queue 保证以下条件总是成立对于队头的元素 x 和任意非队头的元素 y表达式“xy”必为 false。priority_queue 定义如下template class T, class Container vector T, class Compare lessT
class priority_queue{...
};priority_queue 的第三个类型参数可以用来指定排序规则。priority_queue 是使用“堆排序”技术实现的其内部并非完全有序但却能确保最大元素总在队头。因此priority_queue 特别适用于“不停地在一堆元素中取走最大的元素”这种情况。如果你年满18周岁以上又觉得学【C语言】太难想尝试其他编程语言那么我推荐你学Python现有价值499元Python零基础课程限时免费领取限10个名额▲扫描二维码-免费领取戳“阅读原文”我们一起进步