目录
1、已知C风格的字符串,完成对字符串通过下标访问时的异常处理机制(越界访问)
List
#include <iostream>
#include <list>
using namespace std;
void printlist(list<int> l){
//迭代器
//实例化一个迭代器
list<int>::iterator iter;
for(iter=l.begin();iter!=l.end();iter++){
cout<<*iter<<" ";
}
cout<<endl;
}
int main()
{
//构造函数
//无参构造
list <int> l;
printlist(l);
//构造n个元素拷贝给本身
list<int> l1(2,11);
printlist(l1);
//区间拷贝
list<int> l2(l1.begin(),l1.end());
printlist(l2);
//拷贝构造
list<int> l3(l2);
printlist(l3);
//赋值
//assign区间赋值
l.assign(l1.begin(),l1.end());
printlist(l);
//assign赋值n个元素
l.assign(3,12);
printlist(l);
//拷贝赋值
l=l1;
printlist(l);
//swap,交换两个实例的元素
list<int> l4; //l4无参构造,为空
l.swap(l4);
printlist(l);
printlist(l4);
//list大小
//size,返回容器中元素的个数
printlist(l4);
cout<<l4.size()<<endl;
//empty,为空返回真
cout<<l.empty()<<endl; //l为空
cout<<l4.empty()<<endl; //l4有两个元素
//resize,重新设置容器的大小,
//如果变小,多余的则删除
//如果变大,多的补0
l4.resize(3);
printlist(l4);
l4.resize(1);
printlist(l4);
//resize(n,elem),变长多余的用elem补充
//变小,多余的删除
l4.resize(4,16);
printlist(l4);
//插入删除
//push_back尾插
l4.push_back(21);
printlist(l4);
//pop_back尾删
l4.pop_back();
printlist(l4);
//push_front头插
l4.push_front(25);
printlist(l4);
//pop_front头删
l4.pop_front();
printlist(l4);
//insert,插入函数
//在迭代器指向的位置插入元素
// l4.insert(l4.begin()+1,88); 报错,不能直接偏移迭代器
//list偏移迭代器需要使用advance偏移
//先实例化一个迭代器
list<int>::iterator iter=l4.begin();
advance(iter,1); //迭代器往后pian偏移一个位置,指向第二个元素
l4.insert(iter,88);
printlist(l4);
//在迭代器指向的位置插入n个元素
l4.insert(iter,2,55); //插入后迭代器,指向插入的元素
printlist(l4);
l4.insert(iter,2,33);
printlist(l4);
//在pos位置区间插入,在l4开始的位置插入l1
l4.insert(l4.begin(),l1.begin(),l1.end());
printlist(l4);
//erase删除迭代器指向的元素
l4.erase(l4.begin());
printlist(l4);
//erase删除迭代器指向的区间的元素
// l4.erase(l4.begin(),l4.end());
// printlist(l4);
//clear,清空容器中的所有元素
// l4.clear();
// printlist(l4);
//remove(elem)函数容器中和elem值匹配的元素
l4.remove(11);
printlist(l4);
//数据存取
//front(),list的第一个元素,返回值是引用,可以修改容器中的值
l4.front()=2;
cout<<l4.front()<<endl;
//back(),容器的最后一个元素
cout<<l4.back()<<endl;
return 0;
}
5.2![](https://img-blog.csdnimg.cn/direct/cafefcebc01c47c594f4ba4b72104bb7.png)
#include <iostream>
using namespace std;
class Num
{
private:
int a;
public:
Num() {}
Num(int a):a(a){}
//设置a的值
void set(int a){
this->a=a;
}
//1-a的和
void Sum(){
if(a<1){
cout<<"a<1"<<endl;
return;
}
int sum=0;
for(int i=1;i<=a;i++){
sum+=i;
}
cout<<"Sum="<<sum<<endl;
}
//1-a的乘积
void Porduct(){
if(a<1){
cout<<"a<1"<<endl;
return;
}
int product=1;
for(int i=1;i<=a;i++){
product*=i;
}
cout<<"Product="<<product<<endl;
}
//1-a的所有质数
void PrimeNumber(){
if(a<1){
cout<<"a<1"<<endl;
return;
}
cout<<"PrimeNumber:";
for(int i=2;i<=a;i++){
int flag=0;
for(int j=2;j<i;j++){
if(i%j==0){
flag++;
}
}
if(0==flag){
cout<<i<<" ";
}
}
cout<<endl;
}
};
int main()
{
Num num1;
num1.set(10);
num1.Sum();
num1.Porduct();
num1.PrimeNumber();
return 0;
}
5.3
1、已知C风格的字符串,完成对字符串通过下标访问时的异常处理机制(越界访问)
#include <iostream>
#include <cstring>
using namespace std;
class Str
{
private:
char *str;
int size;
public:
Str() {}
Str(const char *str):str(nullptr),size(0){
size=strlen(str);
this->str=new char[size+1];
strcpy(this->str,str);
}
char &at(int pos){
if(pos>=size){
throw char(1);
}
return *(str+pos);
}
};
int main()
{
Str s1("hello");
cout<<s1.at(3)<<endl;
cout<<s1.at(5)<<endl;
return 0;
}
2
#include <iostream>
using namespace std;
class A
{
private:
static char a;
public:
A() {}
static void MyGetChar(){
if(a>'9'){
a='0';
}
cout<<a;
a++;
}
};
char A::a='0';
class B
{
private:
static char b;
public:
B() {}
static void MyGetChar(){
if(b>'z'){
// cout<<endl;
b='a';
}
cout<<b;
b++;
}
};
char B::b='a';
int main()
{
for(int i=0;i<26;i++){
if(i<20){
A().MyGetChar();
}
B().MyGetChar();
}
cout<<endl;
for(int i=0;i<26;i++){
if(i<20){
A().MyGetChar();
}
B().MyGetChar();
}
return 0;
}
5.4
#include <iostream>
using namespace std;
class A
{
private:
string str;
public:
A() {}
A(string str):str(str){
int j=0;
for(unsigned int i=0;i<this->str.size();i++){
if(this->str.at(i)>='a'&&this->str.at(i)<='z'){
this->str.at(j)=this->str.at(i);
j++;
}
}
this->str.resize(j);
}
void dump(){
char temp;
for(unsigned int i=0;i<str.size()-1;i++){
for(unsigned int j=0;j<str.size()-1-i;j++){
if(str.at(j)>str.at(j+1)){
temp=str.at(j);
str.at(j)=str.at(j+1);
str.at(j+1)=temp;
}
}
}
cout<<str<<endl;
}
};
class B
{
private:
string str;
public:
B() {}
B(string str):str(str){
int j=0;
for(unsigned int i=0;i<this->str.size();i++){
if(this->str.at(i)>='0'&&this->str.at(i)<='9'){
this->str.at(j)=this->str.at(i);
j++;
}
}
this->str.resize(j);
}
void dump(){
char temp;
for(unsigned int i=0;i<str.size()-1;i++){
for(unsigned int j=0;j<str.size()-1-i;j++){
if(str.at(j)>str.at(j+1)){
temp=str.at(j);
str.at(j)=str.at(j+1);
str.at(j+1)=temp;
}
}
}
cout<<str<<endl;
}
};
int main()
{
string str;
cin>>str;
A a(str);
a.dump();
B b(str);
b.dump();
return 0;
}