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改变后虽不再指向这块内存但是 这块内存依然被占用,没有被释放。但是智能指针会自动释放。