C++——STL学习①各种增加元素
来源:互联网 发布:网络视频编码器 编辑:程序博客网 时间:2024/05/17 03:24
本来是指着一个一个学的,结果最近做题的效果极不好,只能先这么来了。
STL说到底,还是一个存放数据的塑料袋,按这种说法,往塑料袋里放东西,取东西,以物易物,还有看看到底有没有这个东西就是最重要的了(至少看起来如此)
似乎大部分增加元素都用的是“insert”
STL说到底,还是一个存放数据的塑料袋,按这种说法,往塑料袋里放东西,取东西,以物易物,还有看看到底有没有这个东西就是最重要的了(至少看起来如此)
似乎大部分增加元素都用的是“insert”
- 朗文当代高级英语辞典
in‧sert 1
/ɪn'sɜːt,ɪnˋsɝt/ v. [T ] AC英 [ɪn'sɜːt]
MEANINGS 义项
- 1.
to put something inside or into something else
插入,放进
insert sth in/into/between sth
•His hand shook slightly as he inserted the key into the lock. 他把钥匙插进锁里,手微微颤抖。
- 2.
to add something to the middle of a document or piece of writing
〔在文件或文稿中〕加入,加进
insert sth in/into/between sth
•His manager inserted a new clause into his contract. 经理把一项新的条款加进他的合同里。
•Insert your comments in the space below. 把你的意见写在下面空白处。
in‧sert 2
/'ɪnsɜːt,ˋɪnsɝt/ n. [C ]英 ['ɪnsɜːt]
MEANINGS 义项
- 1.
printed pages that are put inside a newspaper or magazine in order to advertise something
〔夹在报纸杂志中的〕插页广告
•a six-page insert on computer software 关于电脑软件的六页插页广告
- 2.
something that is designed to be put inside something else
插入物
•He wore special inserts in his shoes to make him look taller. 他在鞋里垫了专用垫块,让他显得高一点。
insert这个单词本身的意思就是插入,以此为名还是很形象的。
当然,还有另一个单词——push,效果相似,意思也类似
①先从queue开始
讲道理,上次好像有queue专题来着//然而为啥我现在一点都不记得了
// queue::push/pop#include <iostream> // std::cin, std::cout#include <queue> // std::queueint main (){ std::queue<int> myqueue; int myint; std::cout << "Please enter some integers (enter 0 to end):\n"; do { std::cin >> myint; myqueue.push (myint); } while (myint); std::cout << "myqueue contains: "; while (!myqueue.empty()) { std::cout << ' ' << myqueue.front(); myqueue.pop(); } std::cout << '\n'; return 0;}
这个应该还是上次的代码,来自queue
估计没有掌握的原因是一直在看别人怎么写而没有自己动手,当初觉得自己会了其实还是一知半解。
故,给自己出到小题目,练一练:
要求:输入1 1 2 3 5 8 13 21
一开始是照着上面那个改的,既然是照着改的就肯定没出BUG,只不过效果……不是我想要的
代码如下:
#include<bits/stdc++.h>using namespace std;int main(){ queue<int> feib; int a; do { cin>>a; feib.push(a); }while(a); while(!feib.empty()) { cout<<' '<<feib.front(); feib.pop(); } cout<<'\n'; return 0;}
这个输入无比诡异,必须要输入0以后才肯输出,后来我问了一下才知道,原因是:“while(a);”
经过改正
经过改正
#include<bits/stdc++.h>using namespace std;int main(){ queue<int> feib; int a; for(int i=0;i<8;i++) { cin>>a; feib.push(a); } while(!feib.empty()) { cout<<' '<<feib.front(); feib.pop(); } cout<<'\n'; return 0;}
这样看起来正常多了。
②然后还是上次写过的stack
stack
// stack::push/pop#include <iostream> // std::cout#include <stack> // std::stackint main (){ std::stack<int> mystack; for (int i=0; i<5; ++i) mystack.push(i); std::cout << "Popping out elements..."; while (!mystack.empty()) { std::cout << ' ' << mystack.top(); mystack.pop(); } std::cout << '\n'; return 0;}
输出: 4 3 2 1 0
还是练一练:
要求输入一个数n,输出在1到n-2的所有数,并要求逆向输出
代码如下:
#include<bits/stdc++.h>using namespace std;int main(){ int n; stack <int> feib; while(cin>>n) { if(n==0) break; for(int i=1;i<2*n-1;i++) { feib.push(i); } while(!feib.empty()) { cout<<' '<<feib.top(); feib.pop(); } } return 0;}
练习2:输入两个数,交换两个数并输出(我记得,原来正经的做法都是int a,b;然后cin<<a<<b;最后再cout>>a>>b;来着)
顺便,这个代码应该不能直接提交AC,毕竟最后有一个空格问题没有处理
代码:
#include<bits/stdc++.h>using namespace std;int main(){ stack <int> resort; int a; for(int i=0;i<2;i++) { cin>>a; resort.push(a); } while(!resort.empty()) { cout<<resort.top()<<' '; resort.pop(); } return 0;}
③终于写到vector了
毕竟我之前所有试图用vector写的都报错了,还是得克服一下,硬着头皮写╮(╯▽╰)╭
还是那个cplasplas的的代码
// inserting into a vector#include <iostream>#include <vector>int main (){ std::vector<int> myvector (3,100); std::vector<int>::iterator it; it = myvector.begin(); it = myvector.insert ( it , 200 ); myvector.insert (it,2,300); // "it" no longer valid, get a new one: it = myvector.begin(); std::vector<int> anothervector (2,400); myvector.insert (it+2,anothervector.begin(),anothervector.end()); int myarray [] = { 501,502,503 }; myvector.insert (myvector.begin(), myarray, myarray+3); std::cout << "myvector contains:"; for (it=myvector.begin(); it<myvector.end(); it++) std::cout << ' ' << *it; std::cout << '\n'; return 0;}
输出:
myvector contains: 501 502 503 300 300 400 400 200 100 100 100
练习:
要求:已知数列:1 1 2 3 ,要求插入两个数字,5 和 8
代码如下:
#include<bits/stdc++.h>using namespace std;int main(){ vector <int> feib; vector <int>::iterator fei; fei=feib.begin(); fei=feib.insert(fei,8); feib.insert(fei,1,5); int insfeib[]={1,1,2,3}; feib.insert(feib.begin(),insfeib,insfeib+4); for(fei=feib.begin();fei<feib.end();fei++) cout<<' '<<*fei; cout<<'\n'; return 0;}
输出: 1 1 2 3 5 8
介于我比较好奇那些个数字是干什么的,所以一个一个改了改看效果:
首先,先改了feib.insert(fei,1,5);把1改为2:
#include<bits/stdc++.h>using namespace std;int main(){ vector <int> feib; vector <int>::iterator fei; fei=feib.begin(); fei=feib.insert(fei,8); feib.insert(fei,2,5);///stack的名字.insert(迭代器的名字,想让插入的数据重复几次,插入的数据) int insfeib[]={1,1,2,3}; feib.insert(feib.begin(),insfeib,insfeib+4); for(fei=feib.begin();fei<feib.end();fei++) cout<<' '<<*fei; cout<<'\n'; return 0;}
输出: 1 1 2 3 5 5 8
然后,又试图改了一下feib.insert(feib.begin(),insfeib,insfeib+4);把4改为3
#include<bits/stdc++.h>using namespace std;int main(){ vector <int> feib; vector <int>::iterator fei; fei=feib.begin(); fei=feib.insert(fei,8); feib.insert(fei,1,5);///stack的名字.insert(迭代器的名字,想让插入的数据重复几次,插入的数据) int insfeib[]={1,1,2,3}; feib.insert(feib.begin(),insfeib,insfeib+3);///vector的名字.insert(vector的名字.begin(),数组的名字,数组的名字+数组出现的位数) for(fei=feib.begin();fei<feib.end();fei++) cout<<' '<<*fei; cout<<'\n'; return 0;}
输出
1 1 2 5 8
然后,还是这一行,我把begin改为back结果报错(╯‵□′)╯︵┻━┻
最后,我把8和5的位置对调:
#include<bits/stdc++.h>using namespace std;int main(){ vector <int> feib; vector <int>::iterator fei; fei=feib.begin(); fei=feib.insert(fei,5); feib.insert(fei,1,8);///stack的名字.insert(迭代器的名字,想让插入的数据重复几次,插入的数据) int insfeib[]={1,1,2,3}; feib.insert(feib.begin(),insfeib,insfeib+4); for(fei=feib.begin();fei<feib.end();fei++) cout<<' '<<*fei; cout<<'\n'; return 0;}
我觉得,这里把栈的特点完全表示出来了——输出: 1 1 2 3 8 5
我们先把5按进栈,然后再把8按进去,所以在出来的时候,5在8之后出现,可是这明明是vector(╯‵□′)╯︵┻━┻,我也不晓得为什么,如果想明白了,会在底下接着更新的。
④最后再写一个map吧
来自map
// map::insert (C++98)#include <iostream>#include <map>int main (){ std::map<char,int> mymap; // first insert function version (single parameter): mymap.insert ( std::pair<char,int>('a',100) ); mymap.insert ( std::pair<char,int>('z',200) ); std::pair<std::map<char,int>::iterator,bool> ret; ret = mymap.insert ( std::pair<char,int>('z',500) ); if (ret.second==false) { std::cout << "element 'z' already existed"; std::cout << " with a value of " << ret.first->second << '\n'; } // second insert function version (with hint position): std::map<char,int>::iterator it = mymap.begin(); mymap.insert (it, std::pair<char,int>('b',300)); // max efficiency inserting mymap.insert (it, std::pair<char,int>('c',400)); // no max efficiency inserting // third insert function version (range insertion): std::map<char,int> anothermap; anothermap.insert(mymap.begin(),mymap.find('c')); // showing contents: std::cout << "mymap contains:\n"; for (it=mymap.begin(); it!=mymap.end(); ++it) std::cout << it->first << " => " << it->second << '\n'; std::cout << "anothermap contains:\n"; for (it=anothermap.begin(); it!=anothermap.end(); ++it) std::cout << it->first << " => " << it->second << '\n'; return 0;}
输出
element 'z' already existed with a value of 200
mymap contains:
a => 100
b => 300
c => 400
z => 200
anothermap contains:
a => 100
b => 300
mymap contains:
a => 100
b => 300
c => 400
z => 200
anothermap contains:
a => 100
b => 300
练习:
要求:
输出序号和几个单词
代码:
#include<bits/stdc++.h>using namespace std;int main(){map<int,string> words;words.insert(pair<int,string>(1,"iterator"));words.insert(pair<int,string>(2,"fatigue"));words.insert(pair<int,string>(3,"iterator"));words.insert(pair<int,string>(4,"iterator"));pair<map<int,string>::iterator,bool> ret;ret=words.insert(pair<int,string>(5,"fatigue"));map<int,string>::iterator it=words.begin();cout<<"The words contains:"<<'\n';for(it=words.begin();it!=words.end();++it)cout<<it->first<<"=>>"<<it->second<<'\n';return 0;}
输出:
The words contains:
1=>>iterator
2=>>fatigue
3=>>iterator
4=>>iterator
5=>>fatigue
1=>>iterator
2=>>fatigue
3=>>iterator
4=>>iterator
5=>>fatigue
听说map的功能很强大,所以我又皮了一下:
#include<bits/stdc++.h>using namespace std;int main(){map<int,string> words;words.insert(pair<int,string>(1,"iterator"));words.insert(pair<int,string>(2,"fatigue"));words.insert(pair<int,string>(3,"iterator"));words.insert(pair<int,string>(2,"iterator"));pair<map<int,string>::iterator,bool> ret;ret=words.insert(pair<int,string>(2,"fatigue"));map<int,string>::iterator it=words.begin();cout<<"The words contains:"<<'\n';for(it=words.begin();it!=words.end();++it)cout<<it->first<<"=>>"<<it->second<<'\n';return 0;}
输出:
The words contains:
1=>>iterator
2=>>fatigue
3=>>iterator
1=>>iterator
2=>>fatigue
3=>>iterator
果然,能去重并排序……
而且还拒绝后面相同序号赋不同的字符串
阅读全文
0 0
- C++——STL学习①各种增加元素
- C++—STL学习笔记
- C++STL&GP学习后记——初识STL
- C++STL&GP学习后记——初识STL
- C++STL学习(7)各种容器总结
- 学习各种元素标记
- C++:STL:vector删除元素
- javaScript学习笔记——数组末尾元素的增加和删除
- STL—vector删除重复元素
- STL—vector删除重复元素
- STL—vector删除重复元素
- STL—vector删除重复元素
- STL—vector删除重复元素
- stl学习—set
- C++STL priority_queue 学习
- C++STL学习笔记
- C++STL学习
- C++STL学习
- 91. Decode Ways
- maven初识
- Camera2 Android相机Demo
- HTML(二十五)
- flask web 开发 头像显示问题 css没有加载
- C++——STL学习①各种增加元素
- 并发知识点
- 函数表达式(1)(含闭包)
- (三十七)FloatingActionButton、CoordinatorLayout、AppBarLayout、CollapsingToolbarLayout 基本使用
- 跟我一起学习VIM
- HTML(二十六)
- C++ 实现复用第三方库的方法名
- C/C++中extern关键字详解
- HTML(二十七)