#include<iostream>
#include<vector>
#include<unordered_set>
typedef enum {LA, LB, LC} LL;
class A {
public:
void pa() {
std::cout<<"AAAAA"<< a << std::endl;
}
protected:
int a;
};
class B : public A {
private:
int b;
};
template<typename T>
static void cleanMsVec(std::vector<T*>& a) {
for(auto& i:a) {
if(i) {
std::cout<< *i << std::endl;
delete i;
i = NULL;
}
}
}
void printus(const std::unordered_set<LL, std::hash<std::uint16_t>>& us) {
for (const int& iter : us) {
std::cout<<iter<<std::endl;
}
}
int main() {
B* b = new B();
b->pa();
// gcc6 之前, set 把 enum 枚举类型视为新的类型,需指定哈希函数
std::unordered_set<LL, std::hash<std::uint16_t>> us;
us.insert(LA);
us.insert(LB);
us.insert(LB);
us.insert(LC);
printus(us);
std::vector<int> v1 = {1,2,3};
std::vector<int> v2 = {4,5};
for (auto& elem : v1) {
v2.push_back(std::move(elem));
}
for (auto& e : v1) {
std::cout<<e << std::endl;
}
// 静态模板函数
std::vector<int*> v3;
for(int i = 0; i < 3; i++) {
v3.push_back(new int(i*100));
}
cleanMsVec(v3);
for (auto &e:v3) {
std::cout<< e << std::endl;
}
// swap 只能交换两个元素类型相同的容器, 但 assign 可以把子类元素的容器赋值给父类元素的容器
std::vector<A*> va;
std::vector<B*> vb;
for(int i = 0; i < 3; i++) {
vb.push_back(new B());
}
std::vector<A*> va2;
for(int i = 0; i < 3; i++) {
va2.push_back(new A());
}
va.swap(va2);
va.assign(vb.begin(), vb.end());
}
C++笔记:set, 静态模板函数,swap和assign
最新推荐文章于 2023-10-07 15:31:23 发布