加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – std :: vector及其初始化指针的一致性

发布时间:2020-12-16 09:59:45 所属栏目:百科 来源:网络整理
导读:我给出了以下代码来说明我的问题,你可以在 http://cpp.sh/中找到它们 // Example program#include iostream#include string#include vectorint main(){ int *p; p = new int [10]; for(int i=0; i10; i++) p[i] = i; std::vectorint vecArray(p,p+10); vecAr
我给出了以下代码来说明我的问题,你可以在 http://cpp.sh/中找到它们

// Example program
#include <iostream>
#include <string>
#include <vector>

int main()
{
  int *p;
  p = new int [10];
  for(int i=0; i<10; i++)
      p[i] = i;

  std::vector<int> vecArray(p,p+10);
  vecArray[3]=300;

  for(int i=0; i<10; i++)
      std::cout<<vecArray[i]<<std::endl;

    for(int i=0; i<10; i++)
      std::cout<<p[i]<<std::endl;

  delete []p;
}

从代码中我们可以看到,在指针p用于初始化向量vecArray之后,当向量的内容被改变时,它将不会在指针中影响内容.我的问题是:如何才能使vctor的内容与指针始终相同?

解决方法

向量的内容是动态分配的数组内容的副本.

您需要了解您的示例代码分配10次整数两次,一次是在显式调用new时另一次,另一次是在构造向量时.

例如,您可以通过首先构建向量然后获取指向其数据的指针来共享相同的内存:

#include <iostream>
#include <vector>

int     main(void)
{
  std::vector<int> vecArray(10);

  for(int i=0; i<10; i++)
    vecArray[i] = i;

  const int* p = vecArray.data();

  vecArray[3]=300;

  for(int i=0; i<10; i++)
    std::cout<<vecArray[i]<<std::endl;

  for(int i=0; i<10; i++)
    std::cout<<p[i]<<std::endl;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读