vector 容器
添加数据 vector <int> v ; v.push_back(数据);
访问数据的两个迭代器b.begin()和v.end()
vector <int> :: iterator it_begin = v. begin(); //容器起始位置元素的指针
vector <int> :: iterator it_end =v.end(); //指向容器最后一个元素下一个位置的指针
while (it_begin != it_end){
cout<< *it_begin<<endl;
it_begin++;
}
另外一种遍历方式:
for (vector <int> :: iterator it = v.begin() ; it != v.end() ; it++)
{
cout <<*it <<endl;
}
打印vector 元素的函数:
void printvec (vector <int> &v ){
for (vector <int> :: iterator it = v.begin() ; it != v.end() ; it++)
{
cout <<*it <<endl;
}
}
vector 相似于数组,但是数组是静态空间,vector是动态扩展
动态扩展:
并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间
vector称之为单端数组,如下图:
无参构造:
vector <int > v ;
有参构造:
vector <int > v2 (v1.begin(),v1.end()); //直接赋值迭代器中间的数据
n个elem方式:
vector <int> v3 (10,100); //10个100
拷贝构造:
vector <int > v4(v);
vector 容量和大小:
判断是否为空 v1.empty()
输出容量v1.capacity() 一般是有空余,比如创建vector空间是13,但是只插入了10个数
输出大小 v1.size() // 按照上述,容量是13,大小是10
重新指定大小v1.resize (20 , x) ; //若过长,则默认使用x值填充 ,若不指定x值,默认为0
若比原来的短,超出的部分删去
插入删除:push_back / pop_back
push_back在尾部添加
pop_back在尾部删除
insert指定位置插入 v1.insert(v1.begin() ,100) //在头部插入100
insert指定位置插入 v1.insert(v1.begin() ,2,1000) //在头部插入2个1000
v1.erase(v1.begin()) ;删除一个头部元素
v1.erase(v1.begin(),v1.end()) ;从头到尾全部删除 等于v1.clear();
string容器
string 的构造函数(下列分别对应默认构造、有参构造、拷贝构造):
注意:有参构造需要传入指向const的指针变量
字符串拼接:
直接str += "需要拼接的字符";
或者str.append(” 需要拼接的字符“)
或者需要限制拼接的字符的长度:
str3.append( "LOL_APEX",3); //第二个参数是长度,即拼接了LOL
str3.append("LOL_APEX!",4,5); //从第4个参数开始截取,取5个长度即:APEX!
查找 :find
int pos = str1.find("abc");//返回第一次出现字符的位置,若没找到返回-1
int pos1= str1.rfind ("abc"); //该函数从右往左查找, 但是下标位置还是从左往右计算
替换:replace
string str1 = "abcdefg";
str1.replace(1,3,"1111");
返回结果a1111efg ,会把指定的字符全替换进去,而不是依据1到3的长度
字符串比较:compare
字符串比较是按字符的ASCII码进行对比
str1.compare(str2)
=返回 0
>返回 1 //第一个字符大于第二个字符
<返回 -1
string字符串存取:
访问单个字符:at
for (int i = 0 ;i < str.size() ;i++){
cout <<str.at(i)<<" "; //等同于 cout <<str[i]<<" ";
}
修改单个字符也可以用at()
删除:delete 插入:insert
string str = "hello";
str1.insert (1,"111") ; //在位置为1处插入
最后输出h111ello
str.erase (1,3); //从位置1删到位置3
输出hello
截取子串substr:
string str1 = "abcdef";
string subs1 = str1.substr (1,3);
输出sub1 为bcd
实用场景比如截取邮件的@前用户名
拷贝: copy