实验报告(五)

#include <iostream>
#include <vector>
#include <string>
using namespace std;

// 函数声明 
void output1(vector<string> &);  
void output2(vector<string> &);  

int main()
{
vector<string>likes, dislikes; // 创建vector<string>对象likes和dislikes
string c;
while(cin>>c,c!="0"){
likes.push_back(c);
}
// 为vector<string>数组对象likes添加元素值 ( favorite book, music, film, paintings,anime,sport,sportsman,etc) 
// 补足代码 
// 。。。 

cout << "-----I like these-----" << endl;
output1(likes); 
![](https://images2018.cnblogs.com/blog/1349923/201805/1349923-20180523220143888-1265103778.png)

// 调用子函数输出vector<string>数组对象likes的元素值 
// 补足代码
// 。。。 
string c2;
while(cin>>c2,c2!="0"){
	
dislikes.push_back(c2);
}
// 为vector<string>数组对象dislikes添加元素值 
// 补足代码 
// 。。。 
	
cout << "-----I dislike these-----" << endl;
    output2(dislikes);
 
// 调用子函数输出vector<string>数组对象dislikes的元素值 
// 补足代码
// 。。。 
    swap(likes,dislikes);
// 交换vector<string>对象likes和dislikes的元素值 
// 补足代码
// 。。。 
	
cout << "-----I likes these-----" << endl;
output1(likes);

// 调用子函数输出vector<string>数组对象likes的元素值 
// 补足代码
// 。。。 
cout << "-----I dislikes these-----" << endl;
output2(dislikes);

// 调用子函数输出vector<string>数组对象dislikes的元素值 
// 补足代码
// 。。。 
return 0;
}


// 函数实现 
// 以下标方式输出vector<string>数组对象v的元素值  
void output1(vector<string> &v) {
for(int i=0;i<v.size();i++){
cout<<v[i]<<endl;
}
// 补足程序
// 。。。 
}

// 函数实现
// 以迭代器方式输出vector<string>数组对象v的元素值 
void output2(vector<string> &v) {
for(int i=0;i<v.size();i++){
cout<<v[i]<<endl;
}
// 补足程序
// 。。。 
}

6-17

#include <iostream> 
using namespace std ;
int main() { 
   int *p; 
   *p = 9; // 指针p初始化有问题,它这样是指向内存中的地址的,如果是系统重要的数据的位置,会导致系统崩溃。 
   cout << "The value at p: " << *p; 
   return 0; 
}

6-18

#include<iostream>
using namespace std;
int fn1()
{
    int *p=new int (5);
    return *p;
    delete p;//加了一个删除,避免内存泄漏 
}
int main()
{
    int a=fn1();
    cout<<"The value of a is:"<<a;
    return 0;
 }

凡是动态内存分配的,就要注意delete

总结和体会

还要多花点时间在C++上,不仅新学的完成度很低,期中考试的也还没有做出来,看书的时候有很多疑惑,看的也很慢,实际操作问题也是很多,一直在改。

1.关于vector的
声明形如vector<> vec;的不是new出来而是作为普通变量的那么不需要delete, 在变量超出作用域时会自动回收
如果是用*vec = new vector<>()这种方式动态创建的vector那么需要delete vec
vec里存放的元素如果不是指针那么不用delete, 这些元素在vec被释放时会被一起释放
vec里存放的元素是指针并且这些指针都是指向自己new的对象的话, 那么需要自己一个个delete

这是链接:
https://zhidao.baidu.com/question/242767717391714204.html

2.关于删除指针和删除数组
网上看到一个删除指针是否删除数组,觉得讲的挺好,这是链接:
https://zhidao.baidu.com/question/529047970.html

3.老师给的代码里的函数
(1)push_back是算法语言里面的一个函数名。如c++中的vector头文件里面就有这个push_back函数,在vector类中作用为在vector尾部加入一个数据。

(2)isprime是一种函数,功能是判断素数。
int isprime (int n)
{
int flag,i;
flag=1;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
flag=0;
break;
}
}
return flag;
}
这是百度的,也get到了老师的通过bool判断真假返回这一方法。

4.补充代码时遇到的问题
(1)将string写成了char之后产生了问题。
(2)给数组定初值的时候不知道是否可以按照字符串变量赋初值来。
(3)迭代器方式输出还不会。
(4)使用swap的时候,一开始写的是void swap(likes&dislikes)但是是报错的,不知道为什么。

未完成的,晚点会陆续补出来。

posted @ 2018-05-23 22:04  花逢君  阅读(111)  评论(0编辑  收藏  举报