C++stl簡單使用

2021-02-21 個人學習錄
//1.sort函數排序/*using namespace std;int main(){  int a[] = { 2,0,3,1,8,2,4,0 };  sort(a, a + 3);//對前三個數排序  for (int i=0;i<8;++i)  {    cout << a[i] << " ";  }  return 0;}*///2.字符串處理/*using namespace std;int main(){  string s = "hello world!";  cout<<s<<endl;  string a;  getline(cin, a);//獲取一行數據  cout << a << endl;  return 0;}*//*using namespace std;int main(){  string s;  s += "小明";  s =s+"小紅";  int a = 5;  s += (a + '0');//把a加入到字符串中  cout << s << endl;  string x = "741852";  sort(x.begin(),x.end());//排序  cout << x << endl;  string n = "7a4185b2";  n.erase(n.begin());//刪除第一個元素  n.erase(--n.end());//刪除最後一個元素  cout << n << endl;  string m = "147258369";  m = m.substr(2, 5);//取72583,從2位置開始往後面截斷5個  cout << m<<endl;  m = m.substr(2, -1);//索引為2,截斷到最後  cout << m << endl;  return 0;}*///循環/*using namespace std;int main(){  string s="147258369";  for (int i=0;i<s.length();++i)  {    cout <<s[i] ;  }  cout << endl;  //迭代器  for (string ::iterator it=s.begin();it!=s.end();++it)  {    cout << *it;  }  cout << endl;    //迭代器化簡  for (auto it=s.begin();it!=s.end();++it)  {    cout << *it;  }  cout << endl;  //C++11新特性  for (auto x:s)  {    cout << x;  }  return 0;}*///3.vector.vector相當於數組,模板類型相當於存放的內容/*using namespace std;int main(){  //1.vector構造  vector <int> v0;//定義一個空的vector  vector<int> v2(4);//定義一個4個大小的vector,初始為0  for (auto x:v2)  {    cout << x;  }  cout << endl;  vector<int> v3(4, 6);//定義一個4個大小的vector,初始值為6  for (int i=0;i<v3.size();++i)  {    cout << v3[i];  }  cout << endl;  vector<int> v{ 8,2,3,4,5 };//定義一個vector,數字為1,2,3,4,5  for (auto it=v.begin();it!=v.end();++it)  {    cout << *it;  }  cout << endl;  cout << v[1];//取索引為1的元素  cout << endl;  cout << v.at(2);//取索引為1的元素  return 0;}*//*using namespace std;int main(){  //push_back追加內容  vector <int> v;  v.push_back(1);  v.push_back(2);  v.push_back(3);  v.push_back(4);  v.push_back(6);  for (int i=0;i<v.size();++i)  {    cout << v[i];  }   cout << endl;  v.resize(10);//進行重置大小,不賦值默認為0  for (int i = 0; i < v.size(); ++i)  {    cout << v[i];  }  cout << endl;  v.erase(v.begin());  v.erase(--v.end());  for (int i = 0; i < v.size(); ++i)  {    cout << v[i];  }  return 0;}*//*using namespace std;int main(){  //push_back追加內容  vector <int> v;  v.push_back(1);  v.push_back(2);  v.push_back(3);  v.push_back(4);  v.push_back(6);  cout << v.front()<<" ";//獲取第一個元素  cout << v[0]<<" ";  cout << *v.begin()<<" ";  cout << v.back()<<" ";//獲取最後一個元素  cout << v[v.size()-1]<<" ";  cout << *--v.end()<<endl;  //排序  //vector<int> v{ 1, 4,  7, 2, 5, 8, 3, 6, 9 };  sort(v.begin(), v.end(), less<int>());//從小到大排列  for (auto x : v)  {    cout << x;  }  cout << endl;  sort(v.begin(), v.end(), greater<int>());//從大到小排列  for (int i=0;i<v.size();++i)  {    cout << v[i];  }  return 0;}*///4.棧/*using namespace std;int main(){  stack<int> s;  //s.push(1);  s.push(2);  s.push(3);  s.push(4);  s.push(5);  cout << s.top() << endl;  s.pop();  cout << s.top() << endl;  cout << s.size() << endl;  bool a = s.empty();  cout << a << endl;  return 0;}*///進位轉換(十轉二)/*using namespace std;int itob(int decimal){  stack<int> s;  int res = 0;  while (decimal!=0)  {    s.push(decimal % 2);    decimal /= 2;  }  while (!s.empty())  {    res = res * 10 + s.top();    s.pop();  }  return res;}int main(){  int n;  cin >> n;  cout << itob(n);  return 0;}*///輸入一行字符串,將字符串逆序列印//輸入:hello world//輸出:world hello/*using namespace std;int main(){  string str;  stack<string> s;  getline(cin, str);  stringstream ss;  ss << str;  while (ss>>str)  {    s.push(str);  }  while (!s.empty())  {    cout << s.top();    s.pop();    if (s.size() != 0) cout << " ";  }  return 0;}*//*#include <iostream>using namespace std;int main(){  //1.字符串轉數字  string s = "123456";  int i;  stringstream ss;  ss << s; // 將string類型的值放入輸入流中  ss >> i;// 從sstream中抽取前面插入的string類型的值,賦給int類型  cout << i << endl;  //方法2  string a = "123455";  int b = stoi(a);  cout << b << endl;  //數字轉字符串  int c = 1234;  string out;  stringstream aa;  aa << c;  aa >> out;  cout << out << endl;  //方法2  int d=23123456;  cout << to_string(d) << endl;  return 0;}*///4.隊列/*using namespace std;int main(){  queue<int> q;  q.push(5);  q.push(6);  q.push(7);  cout << q.front() << endl;  cout << q.size() << endl;  return 0;}*//*using namespace std;int main(){  map<int, int> m;//有序的,樹狀結構  m[6] = 3;  m[5] = 8;  m[4] = 9;  for (auto it=m.begin();it!=m.end();it++)  {    cout << it->first << " " << it->second << endl;  }  for (auto tmp : m)  {    cout << tmp.first << " " << tmp.second << endl;  }  return 0;}*//*using namespace std;int main(){  unordered_map<int, int> m;//無序的  m[6] = 3;  m[5] = 8;  m[4] = 9;  m[2] = 6;  m[1] = 0;  for (auto it = m.begin(); it != m.end(); it++)    cout << it->first << " " << it->second << endl;  for (auto tmp : m) {    cout << tmp.first << " " << tmp.second << endl;  }  return 0;}*///pair的用法,將map轉成vector進行排序/*using namespace std;bool cmp(pair<int, int> a, pair<int, int> b){  return a.first > b.first;}int main(){  unordered_map<int, int> m;//無序的  m[4] = 9;  m[2] = 6;  m[6] = 3;  m[5] = 8;  m[1] = 0;  vector<pair<int, int>> v(m.begin(), m.end());  sort(v.begin(), v.end(), cmp);  for (auto tmp : v) {    cout << tmp.first << tmp.second << endl;  }  return 0;}*///集合,計數去重/*using namespace std;int main(){  set<int> s;//樹狀結構,有序  unordered_set<int> s2;//哈希結構,無序,快  s.insert(3);  s.insert(4);  s.insert(4);  s.insert(4);  s.insert(5);  cout << s.size() << endl;  for (auto tmp:s)  {    cout << tmp << " ";  }  cout << endl;  for (auto it=s.begin();it!=s.end();++it)  {    cout << *it << " ";  }  cout << endl;  return 0;}*///deque雙端隊列/*using namespace std;int main(){  deque<int> d;  //4 9 1 2  d.push_back(1);  d.push_back(6);  d.push_back(5);  d.push_back(7);  d.push_back(2);  d.push_front(9);  d.push_front(5);  d.push_front(3);  d.push_front(6);  d.push_front(4);  d.pop_back();  d.pop_front();  for (auto tmp:d)  {    cout << tmp <<" ";  }  cout << endl;  sort(d.begin(), d.end(), greater<int>());  for (auto it=d.begin();it!=d.end();++it)  {    cout << *it <<" ";  }  cout << endl;  return 0;}*///list雙向鍊表using namespace std;int main(){  list<int> li;  li.push_back(6);  li.push_front(5);  li.emplace_front(9);//在開頭添加元素  li.emplace_back(10);  li.insert(++li.begin(), 2);  for (auto tmp:li)  {    cout << tmp << " ";  }  cout << endl;  for (auto it = li.begin(); it != li.end(); it++) cout << *it << endl;  return 0;}

相關焦點

  • 跟我學C++中級篇——STL的學習
    一、c++標準庫C++的標準庫主要包含兩大類,首先是包含C的標準庫的,當然,為了適應c++對一些C庫進行了少許的修改和增加。最重要的當然是面向對象的c++庫;而c++庫又可以分成兩大類,即面向對象的c++庫和標準模板庫,也就是題目中的STL。
  • 跟我學C++中級篇——STL中的字符串
    二、字符串的實現在面試時經常有這種題,讓自己實現一個簡單的字符串類,下面是比較常見的實現的方式:class mystring{    public:         mystring() : str_(new char[1])         {            * str_ = '\0';         }
  • C 語言會比 C++ 快?
    std::unordered_set 取代原自定義的哈希表我們使用 std::sort 取代原自定義的排序例程下表是我們得到的結果:compiler/stldebug這樣的情況是因為我們的實現對於 STL 依賴非常簡單,我們只使用其中三個算法/容器。讓我們看看當我們停止使用其中一個時會發生什麼。首先不使用 unordered_set我們基準測試的先前版本的秘密就在於 unordered_set 從來沒有在那個版本中存在過。
  • 3D印表機教程 如何使用magics軟體修改STL格式文件
    STL是目前絕大多數3D印表機通用的標準格式,它用三角網格來簡單表現三維CAD模型,幾乎所有的三維建模軟體都支持導出STL文件。我們從網絡上下載的3D列印模型一般也都是stl的,通過3D列印切片軟體處理後,即可輸出到3D列印進行列印。
  • ​跟我學C++中級篇——STL的容器vector
    如果單純的只考慮開發目標,而不考慮對內存佔用和再分配導致的性能下降,不用考慮刪除時迭代器的問題,那麼幾乎這玩意兒就可以能抵擋住大多數情況下的對數組的使用了,可惜,沒有單純的想法,還是得面對現實。std::vector重載了[],所以支持類似數組一樣的隨機訪問,你可以簡單理解成它就是一個大數組,只不過他更強大,支持迭代器訪問和動態處理(刪除、增加等),且不需要你擔心對內存的處理。
  • json for modern c++的使用
    json for modern c++是一款非常好用的json庫,具有語法直觀和使用簡單的特點,並且是用C++11標準編寫的,此外還支持STL和json容器之間的轉換,可謂集方便又強大。本文推薦給廣大C++程式設計師,相信學習完本文之後,在處理json時一定會得心應手。
  • C++ 的門門道道 | 技術頭條 - CSDN
    九、內存拷貝小心內存越界memcpy,memset有很強的限制,僅能用於POD結構,不能作用於stl容器或者帶有虛函數的類。帶虛函數的類對象會有一個虛函數表的指針,memcpy將破壞該指針指向。十二、積極的使用const,理解const不僅僅是一種語法層面的保護機制,也會影響程序的編譯和運行const常量會被編碼到機器指令。
  • 99%的工程師不知道的技巧,solidworks編輯stl文件
    今天solidworks家園給大家介紹Solidworks怎麼編輯stl文件 ,希望對大家有所幫助!1、 經常有人在群裡問我,Solidworks怎麼編輯stl文件(3D列印常用格式)?下圖是solidworks打開stl文件後的樣式,可以發現是無法編輯的,無法繪製草圖,甚至無法測量任何參數。
  • C++(STL):17---deque之迭代器使用
    此函數通常和 begin() 搭配使用。rbegin()返回指向最後一個元素的反向迭代器;如果是 const 類型容器,在該函數返回的是常量反向迭代器。rend()返回指向第一個元素之前一個位置的反向迭代器。如果是 const 類型容器,在該函數返回的是常量反向迭代器。此函數通常和 rbegin() 搭配使用。
  • 深入理解快速排序和 STL 的 sort 算法
    那年初識快排2.1 看似青銅實則王者常見不等同於簡單。Stack一般是系統分配空間有限內存連續速度很快,每個系統架構默認的棧大小不一樣,筆者在x86-CentOS7.x版本使用ulimit -s查看是8192Byte。避免棧溢出的一種辦法是使用循環,以下為筆者驗證的使用STL的stack來實現的循環版本,代碼如下:
  • 「最佳實踐」C++陷阱與套路
    本文結合號主的工作經驗和學習心得,對C++語言的一些高級特性,做了簡單介紹;對一些常見的誤解,做了解釋澄清;對比較容易犯錯的地方,做了歸納總結;希望藉此能增進大家對C++語言了解,減少編程出錯,提升工作效率。
  • C++機器學習庫介紹
    目錄為什麼我們要使用機器學習庫?C++中的機器學習庫SHARK 圖書館MLPACK庫為什麼我們要使用機器學習庫?這是很多新來者都會遇到的問題。庫在機器學習中的重要性是什麼?讓我試著在這一節解釋一下。這就是如何使用c++中的Shark庫來構建線性回歸模型!MLPACK C++庫mlpack是一個用c++編寫的快速靈活的機器學習庫。它的目標是提供快速和可擴展的機器學習算法的實現。mlpack可以將這些算法作為簡單的命令行程序、或綁定Python、Julia和c++,然後可以將這些類集成到更大規模的機器學習解決方案中。
  • c++的輸入與輸出
    c++輸入與輸出C++ 標準庫提供了一組豐富的輸入/輸出功能,本章將討論 C++ 編程中最基本和最常見的 I/O 操作。輸入輸出並不是c++語言的正式組成成分,c和c++沒有為輸入輸出提供專門的結構。在c語言中輸入輸出是通過調用scanf和printf 實現的,在c++中是通過調用流對象cin和cout實現的。
  • python+C、C++混合編程的應用
    有的語言專注於簡單高效,比如python,內建的list,dict結構比c/c++易用太多,但同樣為了安全、易用,語言也犧牲了部分性能。在有些領域,比如通信,性能很關鍵,但並不意味這個領域的coder只能苦苦掙扎於c/c++的陷阱中,比如可以使用多種語言混合編程。
  • python3使用ctypes在windows中訪問C和C++動態連結庫函數示例
    python3使用ctypes在windows中訪問C和C++動態連結庫函數示例這是我們的第一個示例,我們儘量簡單,不傳參,不返回,不訪問其他的動態連結庫一 測試環境介紹和準備Python3.7.0 (源碼和安裝文件)http://ffmpeg.club/python二 C/C++部分代碼1 首先完成C/C++的動態連結庫,與做python擴展庫不同,ctypes調用的c++
  • C++、java 和 C 的區別
    一、基礎類型c++:** java:** C#:1.以java為準,c++裡面的int short long 像這樣的整型 一般都有unsigned 和signed的區分 ,這個跟java和c# 的區別比較大,但c#裡面有unit ulong ushort 這三種就相當於c++的修飾詞unsigned,當c++李明的變量類型定義unsigned,就默認是整數。
  • 劍指信奧|C++ 之 STL - 算法 accumulate
    劍指信奧|C++ 之 STL - 算法 accumulate求和簡單又不簡單數值算法我們已經學習了 STL 非可變序列算法中的幾個常用的算法函數,今天,我們換一個算法類別。STL 的算法有一個類別是數值算法,這一類別下的算法主要是對容器進行數值運算,我們就從一個比較簡單的算法 accumulate 求和 切入,了解一下數值算法的基本含義和使用。
  • 使用SWIG封裝C++為python庫
    之前給C++程序做單元測試,有過兩種方式:一是自己寫專門的測試demo,二是使用gtest框架。
  • C++ STL詳解(1)
    所以在刷題時配合使用 STL 可以極大的提高做題的速度。可以根據情況來選擇使用 STL 來做題目,如果題目對時間要求比較高的話可以不使用 STL,比如棧和隊列可以使用數組來進行模擬等等。一般情況下可以直接選擇使用STL來做題目。vector初始化.