C++有关问题求教
C++问题求教?
#include "stdafx.h"
#include <algorithm>//算法头文件
#include <vector>//vector容器头文件
#include <iostream>//输入出头文件
using namespace std;//使用标准库
template <class t>//定义函数模板
void show(t & sv)//sv为t类型
{
if(sv.empty())//sv容器为空
cout<<"没有元素"<<endl;
else//容器不为空
{
t::iterator i1=sv.begin();//声明容器的迭代器,它指向容器的第1个元素
for(;i1!=sv.end();i1++)//容器可用的位置为end()-1
cout<<*i1<<" ";//输出容器的各个元素
cout<<endl;
}
}
int main(int argc, char* argv[])
{
int size=10;
vector<char>v1(size);//有size个类型为char的元素,
cout<<"使用A填充容器"<<endl;
fill(v1.begin(),v1.end(),'A');//用A填充v1容器的所有元素
show(v1);//调用函数输出
char a[]={'B','B','B','B'};
vector <char> v2(a,a+4);//使用字符数组初始化v2容器
show(v2);//调用函数输出
cout<<"复制容器v2到容器v1"<<endl;
copy(v2.begin(),v2.end(),v1.begin()+3);//将v2的所有元素依次复制到v1第3个元素后
show(v1);//调用函数输出
vector<char>::iterator iter1=v1.begin();//声明迭代器,指向容器的第1个元素
cout<<"移除容器v1中值为A的元素"<<endl;
iter1=remove(v1.begin(),v1.end(),'A');//移除容器v1中所有值为A的元素
show(v1);//调用函数输出
v1.erase(iter1,v1.end());//删除末端元素
show(v1);//调用函数输出
cout<<"替换元素值等于B的为C"<<endl;
replace(v1.begin(),v1.begin()+2,'B','C');//用C替换前2个B
show(v1);//调用函数输出
return 0;
}
char a[]={'B','B','B','B'};
vector <char> v2(a,a+4);//使用字符数组初始化v2容器
这里的v2(a,a+4)怎么是加4呢?我想该是加3,V2内有4个元素,不就是a,a+1,a+2,a+3四个来指向吗?
还有这里,同样的问题:
cout<<"替换元素值等于B的为C"<<endl;
replace(v1.begin(),v1.begin()+2,'B','C');//用C替换前2个B
这里面的“+2”和上面的"+4"指的是范围的程度吗?不是数字上的加的运算吗?
小弟不才,初入鸿门,请大家指教。。。。
------解决方案--------------------
这里的v2(a,a+4)怎么是加4呢?我想该是加3,V2内有4个元素,不就是a,a+1,a+2,a+3四个来指向吗?
这个相当于.end()表示的一样,它指的并不是最后一个元素,而是最后一个元素的下一个元素.
------解决方案--------------------
使用数组初始化vector对象,必须指出用于初始化式的第一个元素以及数组最后一个元素的下一位置的地址,所以vector <char> v2(a,a+4);是可以的。当然也可以用数组的一个子集来初始化vector对象,所以vector <char> v2(a,a+3);也是可以的,再如vector <char> v2(a+1,a+3);也是可以的。
#include "stdafx.h"
#include <algorithm>//算法头文件
#include <vector>//vector容器头文件
#include <iostream>//输入出头文件
using namespace std;//使用标准库
template <class t>//定义函数模板
void show(t & sv)//sv为t类型
{
if(sv.empty())//sv容器为空
cout<<"没有元素"<<endl;
else//容器不为空
{
t::iterator i1=sv.begin();//声明容器的迭代器,它指向容器的第1个元素
for(;i1!=sv.end();i1++)//容器可用的位置为end()-1
cout<<*i1<<" ";//输出容器的各个元素
cout<<endl;
}
}
int main(int argc, char* argv[])
{
int size=10;
vector<char>v1(size);//有size个类型为char的元素,
cout<<"使用A填充容器"<<endl;
fill(v1.begin(),v1.end(),'A');//用A填充v1容器的所有元素
show(v1);//调用函数输出
char a[]={'B','B','B','B'};
vector <char> v2(a,a+4);//使用字符数组初始化v2容器
show(v2);//调用函数输出
cout<<"复制容器v2到容器v1"<<endl;
copy(v2.begin(),v2.end(),v1.begin()+3);//将v2的所有元素依次复制到v1第3个元素后
show(v1);//调用函数输出
vector<char>::iterator iter1=v1.begin();//声明迭代器,指向容器的第1个元素
cout<<"移除容器v1中值为A的元素"<<endl;
iter1=remove(v1.begin(),v1.end(),'A');//移除容器v1中所有值为A的元素
show(v1);//调用函数输出
v1.erase(iter1,v1.end());//删除末端元素
show(v1);//调用函数输出
cout<<"替换元素值等于B的为C"<<endl;
replace(v1.begin(),v1.begin()+2,'B','C');//用C替换前2个B
show(v1);//调用函数输出
return 0;
}
char a[]={'B','B','B','B'};
vector <char> v2(a,a+4);//使用字符数组初始化v2容器
这里的v2(a,a+4)怎么是加4呢?我想该是加3,V2内有4个元素,不就是a,a+1,a+2,a+3四个来指向吗?
还有这里,同样的问题:
cout<<"替换元素值等于B的为C"<<endl;
replace(v1.begin(),v1.begin()+2,'B','C');//用C替换前2个B
这里面的“+2”和上面的"+4"指的是范围的程度吗?不是数字上的加的运算吗?
小弟不才,初入鸿门,请大家指教。。。。
C++
算法
类
------解决方案--------------------
这里的v2(a,a+4)怎么是加4呢?我想该是加3,V2内有4个元素,不就是a,a+1,a+2,a+3四个来指向吗?
这个相当于.end()表示的一样,它指的并不是最后一个元素,而是最后一个元素的下一个元素.
------解决方案--------------------
使用数组初始化vector对象,必须指出用于初始化式的第一个元素以及数组最后一个元素的下一位置的地址,所以vector <char> v2(a,a+4);是可以的。当然也可以用数组的一个子集来初始化vector对象,所以vector <char> v2(a,a+3);也是可以的,再如vector <char> v2(a+1,a+3);也是可以的。