Part6 数组、指针与字符串 6.10 智能指针 6.11 vector对象

6.10 智能指针
C++11 提供智能指针的数据类型,对垃圾回收技术提供了一些支持,实现一定程度的内存管理

unique_ptr:不允许多个指针共享资源,可以用标准库中的move函数转移指针
shared_ptr:多个指针共享资源
weak_ptr:可复制shared_ptr,但其构造或者释放对资源不产生影响

6.11 vector对象
为什么需要vector?
  封装任何类型的动态数组,自动创建和删除。
  数组下标越界检查。

例6-18 中封装的ArrayOfPoints也提供了类似功能,但只适用于一种类型的数组。

vector对象的定义
  vector<元素类型> 数组对象名(数组长度);
  如;vector<int> arr(5)
vector数组对象名不表示数组首地址

//6-20vector应用举例
#include<iostream>
#include<vector>
using namespace std;
double average(const vector<double> &arr){
    double sum = 0;
    for(unsigned i = 0; i < arr.size(); i++)
        sum += arr[i];
    return sum / arr.size();
}
int main(){
    unsigned n;
    cout << "n = ";
    cin >> n;

    vector<double> arr(n);//创建数组对象
    cout << "Please input " << n << " real numbers: " << endl;
    for(unsigned i = 0; i < n; i++)
        cin >> arr[i];
    cout << "Average = " << averrage(arr) << endl;
    return 0;
}
//基于范围的for循环配合auto举例
#include<vector>
#include<iostream>
using namespace std;
int main(){
    vector<int> v = {1,2,3};
    for(auto i = v.begin(); i != v.end(); i++)//begin得到起始“指针”,end得到结束“指针”
        cout << *i << endl;
    for(auto e:v)//基于范围
        cout << e << endl;
    return 0;
}

时间: 2024-10-02 00:48:56

Part6 数组、指针与字符串 6.10 智能指针 6.11 vector对象的相关文章

Qt 智能指针学习(7种QT智能指针和4种std智能指针)

从内存泄露开始? 很简单的入门程序,应该比较熟悉吧 ^_^ #include <QApplication> #include <QLabel> int main(int argc, char *argv[]) { QApplication app(argc, argv); QLabel *label = new QLabel("Hello Dbzhang800!"); label->show(); return app.exec(); } 在  从 Qt

boost准模板库scoped_ptr指针的使用以及auto_ptr智能指针的对照

首先我们看看scoped_ptr的基本使用,包括了swap(),get(),reset()的使用,重要的提醒是作用域结束的时候会自己主动析构,无需手动的释放资源: #include<boost/smart_ptr.hpp> #include<iostream> using namespace std; using namespace boost; struct posix_file { posix_file(const char * file_name)//一个文件类 { cout

函数指针、类型别名与智能指针

1 // run in windows: std::system("pause") 2 #include <cstdlib> 3 #include <iostream> 4 #include <memory> 5 #include <functional> 6 7 using namespace std; 8 using namespace std::placeholders; 9 10 template <typename T&g

10.$和#的区别 | 11.添加对象时如何把生成的id返回

一. Mybatis中$和#的区别. 1. $: 解析时不会为内容添加”” 他是sql语句的拼接存在sql注入的危害.传入的为表结构时. 2. #: 解析时会为内容添加””,它的sql时采用占位符,防止sql注入. 11.添加对象时如何把生成的id返回   用:keyProperty="id" 1 <!--逆向工程自动生成--> 2 <insert id="insertSelective" parameterType="com.zhiyo

第6章&#160;数组、指针与字符串(二)指针与数组

原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/10234949.html

第6章 数组、指针与字符串(一)指针的概念、定义和指针运算

原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/10234858.html

指针辨析:悬垂指针、哑指针、野指针、智能指针

悬垂指针: 1:提出的原因: 请看下面的代码片段: [cpp] view plaincopyprint? int *p=NULL; void main() { int i=10;p=&i; cout<<"第一次:*p = "<<*p<<endl; cout<<"第二次:*p = "<<*p<<endl; } [cpp] view plaincopyprint? int *p=NULL;

C++ 基础知识回顾(string基础、智能指针、迭代器、容器类)

[1] string基础 [1.1] string 的构造 1 #include <iostream> 2 #include <string> 3 4 int main() 5 { 6 using namespace std; 7 8 cout << "1 --- string(const char* s):将string对象初始化为s指向的C风格字符串" << endl; 9 string one("benxintuzi_1&

C/C++ 智能指针简单剖析

导读 最近在补看<C++ Primer Plus>第六版,这的确是本好书,其中关于智能指针的章节解析的非常清晰,一解我以前的多处困惑.C++面试过程中,很多面试官都喜欢问智能指针相关的问题,比如你知道哪些智能指针?shared_ptr的设计原理是什么?如果让你自己设计一个智能指针,你如何完成?等等…….而且在看开源的C++项目时,也能随处看到智能指针的影子.这说明智能指针不仅是面试官爱问的题材,更是非常有实用价值. 下面是我在看智能指针时所做的笔记,希望能够解决你对智能指针的一些困扰. 目录