C++ list代码练习、set基础概念、set对象创建、set大小操作
对应力扣,回文链表,代码见下
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:bool isPalindrome(ListNode* head) {list<int> li;ListNode *tmp = head;while(tmp){li.push_back(tmp->val);tmp = tmp->next;}for(list<int>::reverse_iterator it = li.rbegin(); it != li.rend(); it++){if((*it)!= head->val){return false;}head = head -> next;}return true;}
};
有序集合set的特点:容器内的元素不重复、每插入一个元素,容器内的元素都会进行有序排列。
还有另外一种mutiset:容器内的元素可以重复、每插入一个元素,容器内的元素都会进行有序排序。
容器特点:线性容器(vector、string、list),树形容器(set、multiset)
set对象创建,代码见下
#include<iostream>
#include<set>using namespace std;void printSet(const set<int>& s) {for (set<int>::const_iterator it = s.begin(); it != s.end(); it++) {cout << *it << " ";}cout << endl;
}int main() {// 1 默认构造函数set<int> s1;cout << "s1: ";printSet(s1);// 2 初始化列表set<int> s2_1 = { 5, 4, 9, 3, 2, 1 };cout << "s2_1: ";printSet(s2_1);set<int> s2_2 = { 9, 8, 7, 7, 6, 5 };cout << "s2_2: ";printSet(s2_2);// 3 迭代器方式set<int> s3 = {s2_1.begin(), s2_1.end()};cout << "s3: ";printSet(s3);// 4 拷贝构造set<int> s4(s3);cout << "s4: ";printSet(s4);return 0;
}
set赋值操作,代码见下
#include<iostream>
#include<set>using namespace std;void printSet(const set<int>& s) {for (set<int>::const_iterator it = s.begin(); it != s.end(); it++) {cout << *it << " ";}cout << endl;
}int main() {set<int> s = { 9, 8, 4, 3, 1, 2 };cout << "s: ";printSet(s);// 1 = set对象set<int> s1;s1 = s;cout << "s1: ";printSet(s1);// 2 = 初始化列表set<int> s2;s2 = { 3, 5, 4 };cout << "s2: ";printSet(s2);return 0;
}
list大小操作,代码见下
#include<iostream>
#include<set>using namespace std;void printSet(const set<int>& s) {for (set<int>::const_iterator it = s.begin(); it != s.end(); it++) {cout << *it << " ";}cout << endl;
}int main() {set<int> s = { 9, 8, 4, 3, 1, 2 };cout << "s.enpty(): " << s.empty() << endl;cout << "s.size(): " << s.size() << endl;return 0;
}