C++ primer 练习 12.7

重做上一题,这次使用shared_ptr 而不是内置指针。
上一题题目为:(编写函数,返回一个动态分配的int的vector。将此vector传递给另一个函数,这个函数读取标准输入,将读入的值保存在vector元素中。
再将vector传递给另外一个函数,打印读入的值。记得在恰当的时刻delete vector。)

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

//申请内存空间
shared_ptr<vectro<int>> fun1()
{
   return make_ptr<vector<int>>();  //一定要初始化
}

//标准输入
void input(shared_ptr<vector<int>> p)
{
  int i;
  while(cin>>i)
    p->push_back(i);
}

//输出
void output(shared_ptr<vector<int>>p)
{
  for(auto i: *p)
         cout<<i<<" ";
 cout<<endl;
}

int main()
{
  auto p=fun();
 input(p);
 output(p);

 return 0;
}

  

时间: 2024-10-26 11:20:29

C++ primer 练习 12.7的相关文章

《C++Primer》12、13章

第12章 动态内存 12.1 智能指针 shared_ptr<T> make_shared<T>(args) 直接初始化 new int(10); 默认初始化 new int; 值初始化 new int(); 由内置指针(而不是智能指针)管理的动态内存在被显示释放前一直都会存在. 最好坚持只使用智能指针: delete之后重置指针值为nullptr: unique_ptr u = nullptr 释放u指向的对象,将u置为空 u.release()  u放弃对指针的控制权,返回指针

C++primer 练习12.6

题目:编写函数,返回一个动态分配的int的vector.将此vector传递给另一个函数,这个函数读取标准输入,将读入的值保存在vector元素中.再将vector传递给另外一个函数,打印读入的值.记得在恰当的时刻delete vector. #include<iostream> #include<vector> using namespace std; //返回一个动态分配的int的vector vector<int>*refun() { return new vec

c++primer第五版第十九章练习

19.1 #include <iostream> #include <cstdlib> void *operator new(std::size_t n){ std::cout << "new(size_t)\n"; if (void *mem = malloc(n)) return mem; else throw std::bad_alloc(); } void operator delete(void *mem) noexcept{ std::c

new delete 直接管理的内存的规则

primer 5th 12.6练习代码 #include <iostream> #include <algorithm> #include<memory> #include<vector> using std::vector; using std::cin; using std::cout; using std::endl; vector<int>* factory(int i) { ; return new vector<int>{

Python协程深入理解

从语法上来看,协程和生成器类似,都是定义体中包含yield关键字的函数.yield在协程中的用法: 在协程中yield通常出现在表达式的右边,例如:datum = yield,可以产出值,也可以不产出--如果yield关键字后面没有表达式,那么生成器产出None. 协程可能从调用方接受数据,调用方是通过send(datum)的方式把数据提供给协程使用,而不是next(...)函数,通常调用方会把值推送给协程. 协程可以把控制器让给中心调度程序,从而激活其他的协程 所以总体上在协程中把yield看

Python协程深入理解(转)

原文:https://www.cnblogs.com/zhaof/p/7631851.html 从语法上来看,协程和生成器类似,都是定义体中包含yield关键字的函数.yield在协程中的用法: 在协程中yield通常出现在表达式的右边,例如:datum = yield,可以产出值,也可以不产出--如果yield关键字后面没有表达式,那么生成器产出None. 协程可能从调用方接受数据,调用方是通过send(datum)的方式把数据提供给协程使用,而不是next(...)函数,通常调用方会把值推送

vc编程中的20点小笔记

机器学习是一项经验技能,经验越多越好.在项目建立的过程中,实践是掌握机器学习的最佳手段.在实践过程中,通过实际操作加深对分类和回归问题的每一个步骤的理解,达到学习机器学习的目的. 预测模型项目模板不能只通过阅读来掌握机器学习的技能,需要进行大量的练习.本文将介绍一个通用的机器学习的项目模板,创建这个模板总共有六个步骤.通过本文将学到: 端到端地预测(分类与回归)模型的项目结构. 如何将前面学到的内容引入到项目中. 如何通过这个项目模板来得到一个高准确度的模板. 副诼匚盼胁臼匾膊讶赖期放判鼻懒合谖

C++Primer 5th 练习 12.19

这阵子真是太忙了, 连续做了四个课设. 当然这并不能作为好久没写博客的借口, 没写博客的主要原因只有一个: 懒. 最近又开始回顾C++的语法与特性(据说C++就是一门需要反复回顾的语言),以及学习C++的编程规范. 敲了C++Primer 5th 上的一道典型的练习题,纪念一下这即将过去的2016. 题目描述: 定义你自己版本的 StrBlobPtr, 更新 StrBlob类, 加入恰当的 friend 声明及begin 和 end 成员. 这道题目主要是练习 智能指针 share_ptr 和

读书笔记:C++ Primer系列(12)—— 类型转换

题记:类型转换就是将给定类型的表达式转换为另一种类型.C++中的转型可分为两种:隐式类型转换和显式类型转换. 隐式转换 隐式转换不需要任何转换运算符,编译器会自动根据类型兼容性进行不同类型之间的转换.一般情况下,在C/C++中这种转换多出现在基本数值类型上,其基本原则就是所需内存小的类型可以直接转换成内存大相同的或者. 例如: int a=0; a=3.1415+3; 运行结果为:6 解释: 上述加法操作中,其操作数是两个不同类型的值:3.1415是double类型的字面值常量,3是int类型的