参考胡凡《算法笔记》P191-208
主要是vector set string的内容
是在code::block 17.12上跑的
#include <iostream>
#include <stdio.h>
#include <vector>
#include <set>
#include <string>
using namespace std;
int main()
{
// VECTOR 向量 变长数组
/*{
//vector <int> vim[100];
//iterator
//vector<typename>::iterator it
*it
vector <int> vi;
for (int i = 1; i <= 9; i++)
{
vi.push_back(i);
}
vi.pop_back();
vector<int>::iterator it =vi.begin();
for (int i = 0; i < 5; i++)
{
printf("%d",*(it + i));
printf("%d",vi[i]);
printf("%d",*(vi.begin() + i));
//the three methods are equal
}
for (vector<int>::iterator it = vi.begin();it != vi.end();it++){
printf("%d",*it);
}
printf("\n%d\n",vi.size());
vi.insert(vi.begin()+2,-1);
for (vector<int>::iterator it = vi.begin();it != vi.end();it++){
printf("%d",*it);
}
printf("\n");
vi.erase(vi.begin()+5);
for (vector<int>::iterator it = vi.begin();it != vi.end();it++){
printf("%d",*it);
}
vi.erase(vi.begin()+2,vi.begin()+4);
printf("\n");
for (vector<int>::iterator it = vi.begin();it != vi.end();it++){
printf("%d",*it);
}
vi.clear();
printf("\n%d\n",vi.size());
以上,可以发现vector完全可以完成数组的诸多功能,且方便。
目前我知道
1、vi.begin()好用,就可以看作是vi[0]。vi.end()作为迭代器结尾标识。
2、push_back()
pop_back()
size()
clear()
insert(it,x)
erase()
erase(first,last)
erase(vi.begin(),vi.end()) == vi.clear();
Q1:每个括号内可以有什么内容?
Q2:迭代器为什么叫这个名字?和指针的异同?
Q3: 怎样用向量实现多维数组?
}*/
// SET 集合 内部自动有序且不含重复元素的容器
/*{
//set <int> a[100];
//only accessed by iterator
set <int> st;
//st.insert (1);
st.insert (2);
st.insert (3);st.insert (3);
st.insert (4);
st.insert (6); //非顺序
st.insert (5);
st.insert (7);
for(set<int>::iterator it = st.begin(); it != st.end();it++){
printf("%d ",*it);
}
printf("\n");
set<int>::iterator it = st.find(2);
printf("%d ",*it);
printf("\n");
st.erase(st.find(5));
for(set<int>::iterator it = st.begin(); it != st.end();it++){
printf("%d ",*it);
}
st.erase(7);
printf("\n");
for(set<int>::iterator it = st.begin(); it != st.end();it++){
printf("%d ",*it);
}
printf("\n");
st.erase(st.find(4),st.end());
for(set<int>::iterator it = st.begin(); it != st.end();it++){
printf("%d ",*it);
}
printf("\n");
printf("%d\n",st.size());
st.clear();
printf("%d\n",st.size());
//至此,了解了set主要是用于去重和按升序排序。每个元素是惟一的
//Q1: st.find()返回的是什么?
//Q2:set录入元素岂不是很麻烦?
}*/
// STRING
/*{
// string str = "abcd";
// for (int i = 0; i < 4; i++)
// {
// printf("%c".str[i]);
// }
//printf("%s\n",str.c_str());
// for(string::iterator it = str.begin();it != str.end(); it++){
// printf("%c",*it);
// }
// string str1 = "abc";
// string str2 = "xyz";
// string str3;
//
// str3 = str1 + str2;
// str1 += str2;
// cout<<str1<<endl;
// cout<<str3<<endl;
// printf("\n");
//
// printf("%d %d\n",str1.length(),str1.size());
//Q1 :string 和string.h 区别何在?以及 using namespace std 是不是仅仅为了调用stl?
//Q2 :在c++中用include<stdio.h>?
//Q3 :str.length和str.size区别
//Q4 :cout<<**<<endl;为什么要这样定义
// string str = "abcxyz",str2 = "123456";
// //str.insert(2,str2);//str2写opd也行
// // cout<<str<<endl;
// str.insert(str.begin() + 3,str2.begin()+2,str2.end()-1);
// cout<<str<<endl;
//
// str.erase(str.begin()+4);
// cout<<str<<endl;
// str.erase(3,2);
// cout<<str<<endl;
// str.erase(str.begin()+2,str.end()-1);
// cout<<str<<endl;
// str.clear();
//至此知道了string的容器用法,总的来说和前两个有相似之处,这或许就是stl的好处吧。
// string::npos 是一个常数。-1 或者说是4294967295(表示无符号整数的十进制最大值。如果是16进制,那么是0xFFFFFFFF。也可以解释为一个IP地址(V4) 255.255.255.255 )
}*/
cout << "\nHello world!" << endl;
return 0;
}