关于动态分配vector指针和使用shared_ptr的vector指针

动态分配的vector指针

vector<int> *get_num(int n)
{
    vector<int> *pv = new vector<int>(n+1);
    int i , x;
    for(i = 0; i < n; i++)
    {
        cin>>x;
        <span style="background-color: rgb(255, 0, 0);">(*pv)[i] = (x);
</span>    }
    return pv;
}

如果是动态分配的vector指针,那么当为vector中插入元素时只能用数组的方法(上述代码红色),如果用.push_back()函数的方法,就会出错,不知道为什么?

使用shared_ptr的vector指针

shared_ptr<vector<int>> get_num(int n)
{
    shared_ptr<vector<int>> pv = make_shared<vector<int>>();
    int i , x;
    for(i = 0; i < n; i++)
    {
        cin>>x;
        <span style="color:#ff0000;">(*pv).push_back(x);</span>
    }
    return pv;
}

如果是使用shared_ptr的vector指针,那么当为vector中插入元素时只能用.push_back的方法(上述代码红色),如果用数组插入的方法,就会出错,正好和动态分配的vector指针相反 , 不知道为什么?



关于动态分配vector指针和使用shared_ptr的vector指针

时间: 2024-10-11 06:28:59

关于动态分配vector指针和使用shared_ptr的vector指针的相关文章

c++11 智能指针 unique_ptr、shared_ptr与weak_ptr

c++11 智能指针 unique_ptr.shared_ptr与weak_ptr C++11中有unique_ptr.shared_ptr与weak_ptr等智能指针(smart pointer),定义在<memory>中. 可以对动态资源进行管理,保证任何情况下,已构造的对象最终会销毁,即它的析构函数最终会被调用. unique_ptr unique_ptr持有对对象的独有权,同一时刻只能有一个unique_ptr指向给定对象(通过禁止拷贝语义.只有移动语义来实现). unique_ptr

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也提供了类似功能,但只适用于一种

C++11 shared_ptr(智能指针)详解

要确保用 new 动态分配的内存空间在程序的各条执行路径都能被释放是一件麻烦的事情.C++ 11 模板库的 <memory> 头文件中定义的智能指针,即 shared _ptr 模板,就是用来部分解决这个问题的. 只要将 new 运算符返回的指针 p 交给一个 shared_ptr 对象“托管”,就不必担心在哪里写delete p语句——实际上根本不需要编写这条语句,托管 p 的 shared_ptr 对象在消亡时会自动执行delete p.而且,该 shared_ptr 对象能像指针 p —

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

不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

[源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, const 对象的引用 作者:webabcd 介绍不可或缺 Windows Native 之 C++ this 指针 对象数组 对象和指针 const 对象 const 指针和指向 const 对象的指针 const 对象的引用 示例1.CppEmployee 类CppEmployee.h #pragma

C和C指针小记(十七)-使用结构和指针

1.链表 链表(linked list)即使是一些包含数据的独立数据结构的(Node)集合. 链表中的每个节点通过链或指针链接在一起. 程序通过指针访问链表中的节点. 节点通常是动态分配的,但也有由节点数组构建的链表(即使这样,程序也是通过指针来遍历链表). 1.1 单链表 单链表中,每个节点包含一个指向链表下一节点的指针.链表最后一个节点的指针字段的值为NULL.提示链表后面不再有其他节点. 根指针,根指针指向链表的第一个节点,根指针只是一个指针,不包含任何数据. //但链表节点的结构 typ

黑马程序员---C基础9【字符串的输入输出】【字符串相关函数】【指针】【指针变量初始】【二级指针】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- [字符串的输入输出] 1.字符串输出: %s-------从给定的地址开始输出字符直到遇到\0停止: printf("%s\n",&a[3]);  printf("%s\n",a); char a[]="hellowo\0rd!"; 2.字符串输入: 从键盘上接收一个字符串,保存在以a为首地址的字符数组中 scanf("%s&

编程题:比较指向数组元素的指针变量和指向数组的指针变量的不同。

#include<stdio.h> void main() {int a[2][3]={1,2,3,4,5,6}; int *p1,(*p2)[3]; /*p1指向数组元素,p2指向包含3个元素的一维数组*/ p1=a[0];p2=a; /*用指向数组元素的指针变量输出二维数组元素*/ for(;p1<a[0]+6;p1++) printf("%4d",*p1); printf("\n"); /*用指向以为数组的指针变量输出二维数组元素*/ for

指针总结以及常量指针与指向常量的指针与指向常量的常指针

/*指针总结: 1:指针未被初始化一个地址或刚删除一个指针都要将其初始化为0,否则的话将会导致该指针失控 2:假如不想改变一个指针,那么将该指针定义为const, 假如不想改变该指针指向的值,将指针指向的值定义为const 假如即不想改变指针又不想改变指针指向的值,那么将指针和指针指向的值都定义为const 在new堆中创建一个对象,然后将内存地址赋给指针,之后我们就可以通过内存地址访问堆中的对象, 假如要删除该对象,我们只需要使用关键字delete,那么就会删除指针指向的对象并释放存储对象的内