12.1.2节练习

	vector<int> a = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
	vector<int> *pi = new vector<int>(a.begin(), a.end());

练习12.6:编写函数,返回一个动态分配的int的vector。将此vector传递给另一个函数,这个函数读取标准输入,将读取的内容把存在vector元素中。再将vector传递给另一个函数,打印读入的值。记得在恰当的时刻delete vector。

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <stack>
#include <string>
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <memory>
#include <initializer_list>

using namespace std;
//动态分配
vector<int> *dynamic(){
	vector<int> *p = new vector<int>;
	return p;
}
//读入
void input(vector<int> *p){
	int temp;
	while (cin >> temp){
		p->push_back(temp);
	}
}
//打印
void printit(vector<int> *p){
	for (vector<int>::size_type i = 0; i < p->size(); i++){
		cout << (*p)[i] << endl;
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	vector<int> *p = NULL;
	p = dynamic();
	input(p);
	printit(p);
    delete p;
	return 0;
}

练习12.7:重做上一题。这次使用shared_ptr而不是内置指针。

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <stack>
#include <string>
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <memory>
#include <initializer_list>

using namespace std;
//动态分配
shared_ptr<vector<int>> dynamic(){
	shared_ptr<vector<int>> p = make_shared<vector<int>>();
	return p;
}
//读入
void input(shared_ptr<vector<int>> p){
	int temp;
	while (cin >> temp){
		p->push_back(temp);
	}
}
//打印
void printit(shared_ptr<vector<int>> p){
	for (vector<int>::size_type i = 0; i < p->size(); i++){
		cout << (*p)[i] << endl;
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	shared_ptr<vector<int>> p = NULL;
	p = dynamic();
	input(p);
	printit(p);
	return 0;
}

练习 12.8:下面的函数是否有误?如果有,解释错误原因。

bool b(){
    int *p = new int;
    //...
    return p;
}

答:有误,原因是返回值的类型和实际返回值的类型不一样。

练习 12.9:解释下面代码执行的效果:

int *q = new int(42), *r = new int(100);
r = q;
auto q2 = make_shared<int>(42), r2 = make_shared<int>(100);
r2 = q2;

答:运行后 *r = *q = 42.        *r2 = *q2 = 42;

但是上面的形式r改变后虽不再指向这块内存但是  这块内存依然被占用,没有被释放。但是智能指针会自动释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值