实验报告(五)
#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)但是是报错的,不知道为什么。
未完成的,晚点会陆续补出来。