精华内容
下载资源
问答
  • #include"stdafx.h"#include#include#include"conio.h"int main (){typedef struct{int iArr[10];}BIGSTRUCT;...std::vector myvector;int ii = sizeof(BIGSTRUCT);std::cout << "max_size: " <&...

    #include"stdafx.h"#include#include#include"conio.h"int main ()

    {

    typedef struct

    {

    int iArr[10];

    }BIGSTRUCT;

    BIGSTRUCT st;

    std::vector myvector;

    int ii = sizeof(BIGSTRUCT);

    std::cout << "max_size: " << (int) myvector.max_size() << '\n';

    _getch();

    return 0;

    }

    I am using following code to get maximum vector I can allocate; If the size of iArr is 1, then I am getting it 1,073,741,823; But if I increase the size to 10, it is 1,073,741,82;

    http://stackoverflow.com/questions/4321040/c-vectors-of-objects-and-pointers?rq=1[^]

    http://stackoverflow.com/questions/3813124/c-vector-max-size[^]

    I have too many confusions here:

    1) how this number is coming? Ho wit is calculated?

    Now, if I am on a 32bit machine, with 2GB RAM, and if I have a vector of size say 170,000,000 members, what is the maximum size of each member do I have to have so I will not go out of memory?

    Thanks

    解决方案

    Now, if I am on a 32bit machine, with 2GB RAM, and if I have a vector of size say 170,000,000 members, what is the maximum size of each member do I have to have so I will not go out of memory?

    First, the physical amount of RAM has nothing to do with it: a modern OS will shuffle your memory contents around as needed. E. g. on Windows, that''s what the pagefile is for!

    That said, the maximum amount does depend on both your application, and your OS: in theory, you can address a total of 4 GB on a 32 bit machine. However, that address space covers every object of your entire application! So if you''ve got a lot of other spacious objects lying around, this will limit the amount of space available for your array accordingly! Second, your OS may reserve part of your address space: e. g. Windows likes to use the address space above ~3 GB for system functions (this may in fact vary depending on the version of Windows you are using). Therefore your address space may be considerably smaller than you think.

    A word of advice: you should never strive to use up the maximum amount of memory available! If nothing else, you''re severely hampering every other application that is running on the same machine because they''re forced to constantly move memory contents around!

    If you need to store that much data in memory, then you should really try to redesign your algorithm and make it use less memory! The usual way for working with big data is to use a database! They let you load all the data necessary to work on one record individually. Or you can just read the data record by record.

    The calculation is based on the formula (for your case):

    max_size = (size_t)(-1) / sizeof(BIGSTRUCT);

    For an array with 1 int (4 bytes) this yields 1,073,741,823.

    For an array with 10 int (40 bytes) this yields 107,374,182.

    Unfortunately it is not based on your actual machine configuration.

    When using the stl, you can never pre-calculate the exact maximum size of a collection of items. The best you can do is approximate. What follows is an estimate I make here and now, with a few unstated assumptions. If you ask 2 other people, you might get 5 or more different answers. If you ask me again tomorrow I might have a different estimate.

    For std::vector, memory consumed for each element will be a pointer to the struct, plus an instance of the struct, which I assume is on the heap, which means that there will be memory management overhead.

    On recent Windows machines:

    For debug builds, this will be a minimum of sizeof(void*) + (sizeof(BIGSTRUCT) + 16) where the last item is rounded up to whatever the memory management "chunk size" is.

    For release builds, this will be a minimum of sizeof(void*) + (sizeof(BIGSTRUCT) + 8) where the last item is rounded up to whatever the memory management "chunk size" is.

    Both of the rounded values might be different (haven''t checked lately).

    The st::vector array of pointers will likely be contiguous (or if not, then close to it). The structs in the heap will not likely be contiguous (and will depend on how you create them).

    展开全文
  • c++头文件之Vector(Vector的用法)

    千次阅读 2021-03-08 17:34:19
    c++头文件之Vector 开始学习c++,再这个过程中第一个令人头疼的地方就是头文件的含义了,c++头文件的内容会随着我的深入学习进行更新. 首先,我们需要该清楚Vector的定义: C++标准库提供了被封装的动态数组——Vector。...

    c++头文件之Vector

    开始学习c++,再这个过程中第一个令人头疼的地方就是头文件的含义了,c++头文件的内容会随着我的深入学习进行更新.
    首先,我们需要该清楚Vector的定义: C++标准库提供了被封装的动态数组——Vector。大体上讲,就是更容易上手的动态数组.让我们看看Vector的优缺点.
    优点:
    1). Vector可以存放任意类型的数据
    2). 容量可以自动扩展
    3). 初始化形式简单,多样
    4). 可以插入或删除元素
    5). 可以获取数组的长度(是否为空)
    6). 也是通过下标来访问的
    7). 能够一下清除所有数据
    8). 强制调整数组元素的个数以及数值
    9). 将数组的容量进行人为的扩大
    10). 将两个Vector数组的值进行整体性交换

    缺点: Vector的操作简单,容易上手,是数组的"升级版",但是Vector的每次自动扩容都是增加当前空间的50%(第一次除外);会消耗大量的空间与时间,所以小数据使用Vector还是很高效的.

    使用步骤:

    (1) 加入头文件

    代码如下(示例):

    #include<vector>
    
    using namespace std;
    

    (2) Vector数组的初始化

    代码如下(示例):

    //1. 直接赋值
       vector <int> A1 {1,2,3,4,5};               //一维
       vector <vector <int>> A2 {{1,2,3},{1,2,3}};//二维
       
    //2. 不带参数构造
       vector <int> A1;//空的数组,长度为0(size()为0)可以用push_back(elem)输入元素
       
    //3. 带参数构造
       vector <int> A2(10);  //10个数据全为0
       vector <int> A3(10,1);//10个数据全为1
       
    //4. 通过同类型的vector初始化
       vector <int> A1(5,1);
       vector <int> A2(A1);  //通过A1来初始化A2
    

    (3) 访问

    3.1 通过地址访问

    代码如下(示例):

       ///通过地址访问
       vector<int> A1 {1,2,3,4,5};        //一维
       vector<int>::iterator k=A1.begin();//返回第一个元素的地址
       cout<<*k<<endl;     //输出1
       cout<<*(k+1)<<endl; //输出2
       vector<int>::iterator k=A1.end();  //返回最后一个元素的下一位地址
       cout<<*(k-1)<<endl; //输出5
       
    

    3.2 通过下标访问

    代码如下(示例):

     ///通过下标访问
       vector<int> A1 {1,2,3,4,5}; //一维
       cout<<A1.at(0)<<endl;       //输出为1
       
    

    (4) 增,删

    4.1 插入,删除(栈顶)

    代码如下(示例):

     ///添加,删除
       A.pop_back();      //删除最后一个元素
       A.push_back(elem); //在尾部添加一个元素
    

    4.2 特定位置插入删除

    代码如下(示例):

    ///特定位置插入删除
       vector<int> A1 {1,2,3,4,5};        //一维
       vector<int>::iterator k=A1.begin();//下标从0开始
       A1.insert(k+1,9);                  //A1={1,9,2,3,4,5}
       A1.erase(k+1);                     //A1={1,3,4,5}
    

    (5) 获取数组的长度

    代码如下(示例):

    ///获取长度或者判断数组是否为空
       vector<int> A1 {1,2,3,4,5};//一维
       cout<<A1.size()<<endl;//输出5
       cout<<A1.empty()<<endl;//输出0
    

    (6) 其他用法

    代码如下(示例):

    ///返回可用总元素
        A.capacity(); //返回A在内存中总共可以容纳的元素个数
        
    ///强制调整元素个数以及数值    
        A.resize(10); //将A的现有元素个数调至10个,多则删,少则补,其值随机    
        A.resize(10,2); //将A的现有元素个数调至10个,多则删,少则补,其值为2
        
    ///将数组扩容    
        A.reserve(100); //将A的容量(capacity)扩充至100,也就是说现在测试A.capacity();的时候返回值是100.这种操作只有在需要给A添加大量数据的时候才         显得有意义,因为这将避免内存多次容量扩充操作(当A的容量不足时电脑会自动扩容,当然这必然降低性能) 
        
    ///将Vector数组A,B的元素进行整体交换   
        A.swap(B); //B为向量,将A中的元素和B中的元素进行整体性交换
    
    

    (7)几种重要的算法,使用时需要包含头文件:

    #include < algorithm >

    代码如下(示例):

    #include<algorithm>1sort( A.begin() , A.end() ); //对a中的从A.begin()(包括它)到A.end()(不包括它)的元素进行从小到大排列2reverse(A.begin(),A.end()); //对A中的从A.begin()(包括它)到A.end()(不包括它)的元素倒置,但不排列,如A中元素为1,3,2,4,倒置后为4,2,3,13copy(A.begin(),A.end(),B.begin()+1); //把A中的从A.begin()(包括它)到A.end()(不包括它)的元素复制到B中,从B.begin()+1的位置(包括它)开始复制,覆盖掉原有元素4find(A.begin(),A.end(),10); //在A中的从A.begin()(包括它)到A.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置
      
    
    展开全文
  • typedef std:vector studentVector; int main(){ stud jourdon={01,”Jourdon”}; stud mary={02,”Mary”}; stud niki={03,”Niki”}; studentVector studVec; studVec.push_back(jourdon); studVec.push_...

    typedef struct student{

    int stud_number;

    char stud_name[20];

    }stud;

    typedef std:vector studentVector;

    int main(){

    stud jourdon={01,”Jourdon”};

    stud mary={02,”Mary”};

    stud niki={03,”Niki”};

    studentVector studVec;

    studVec.push_back(jourdon);

    studVec.push_back(mary);

    studVec.push_back(niki);

    }

    问一下:怎么样往每个结构体变量的数据成员stud_number前面插入数字2016?

    如:往jourdon的学号01前插入2016,jourdon.insert(jourdon.stud_number.begin(),2016);

    问一下应该怎么写?

    解决方案

    20

    直接用iterator 遍历vector,然后挨个修改成员变量的值就好了

    #include 

    #include 

    using namespace std;

    typedef struct student{

    int stud_number;

    char stud_name[20];

    }stud;

    typedef std::vector studentVector;

    int main(){

    stud jourdon = { 01, "Jourdon" };

    stud mary = { 02, "Mary" };

    stud niki = { 03, "Niki" };

    studentVector studVec;

    studVec.push_back(jourdon);

    studVec.push_back(mary);

    studVec.push_back(niki);

    //遍历修改stud_number的值

    studentVector::iterator it;

    for (it = studVec.begin(); it != studVec.end(); it++)

    it->stud_number += + 201600;

    //遍历打印

    for (it = studVec.begin(); it != studVec.end(); it++)

    cout <stud_number <stud_name <

    }

    60

    引用:

    问一下ri_aje,vector[index]直接用,怎么用,能说的具体一点吗?

    问一下qq423399099,若程序中的学号位数不定,是从0到studVec.size()的一个数,如下:

    for(int i=0;i

    studVec[i].stud_number=i;

    这时该怎么样修改?能否需要转换为字符,然后用字符串连接符?

    长度不定确实要转成字符串,然后拼接

    展开全文
  • Vector越界问题

    2020-12-30 11:27:42
    Vector数组越界问题 在写 for 循环时候,当条件为 i < = v.size()-1的时候, 很容易出现数组越界。当v的size是0的时候,从数学上,v.size()-1 = -1,要知道v.size()是个无符号整数,根据C++的规则表达式v.size()-...

    Vector数组越界问题

    在写 for 循环时候,当条件为 i < = v.size()-1的时候, 很容易出现数组越界。当v的size是0的时候,从数学上,v.size()-1 = -1,要知道v.size()是个无符号整数,根据C++的规则表达式v.size()-1 也是个无符号整数,这样-1转成无符号数的值是4294967295。
    添加越界检测

    // if out of bounds, writes a message (could throw an exception)
      Object & operator[]( int index )
     { 
       if (index >=0 && index <size() )
          return objects[ index ];
        else
          cout<<"index out of bounds\n";
       return objects[0];
      }
      const Object & operator[]( int index ) const
      { 
      if (index >=0 && index <size() )
        return objects[ index ];
      else
       cout<<"index out of bounds\n";
      return objects[0];
    }
    
    
    展开全文
  • 通过使用成员函数 emplace(),可以在 vector 序列中插入新的元素。对象会在容器中直接生成,而不是先单独生成对象,然后再把它作为参数传入。emplace() 的第一个参数是一个迭代器,它确定了对象生成的位置。对象会被...
  • SVG是一种矢量图格式,是Scalable Vector Graphics三个单词的首字母缩写。在xml文件中的标签是,画出的图形可以像一般的图片资源使用,例子如下:android:width="24dp"android:height="24dp"android:viewportHeight=...
  • 最近的一个项目中遇到了调用别人的sdk接口(dll库)而传给我的是一个vector指针,用完之后还要我来删除的情况。这个过程中首先就是在我的exe中将其vector指针转为相应指针再获取vector中相应的数据问题,始终都获得不...
  • void print(vector<int>&v) { for(vector<int>::iterator it=v.begin();it!=v.end();it++) cout*it; cout; } void test() { vector<int>v1; for(int i=0;i;i++) v1.push_back(i); print(v1); } int main() { test()...
  • 只有包含了它的cpp 编译的时候才会被决定是使用什么的内存分配代码. 考虑一下: 当你声明了一个vector<> . 并把这个vector交给一个 dll里的代码来用. 用完后, 在你的程序里被释放了. 那么如果你 在dll里往vector里...
  • 一、vector 的初始化:可以有五种方式 ①vector<type>a(10); 定义10个元素的数组 ②vector<type>a(10,1) 十个元素为1的数组; ③vector a(b); //用b向量来创建a向量,整体复制性赋值 ④vector a(b.begin...
  • 简单研究一下c++ vector是否会栈溢出 使用char数组复现问题 我在linux环境下,简单复现了一下栈溢出的情况。首先使用ulimit -a | grep stack得到当前shell下应用程序的栈大小是8192K,也就是8M。在main函数中定义了...
  • 相比较于vector,数组的缺点前言数组的缺点数组的灵活性差数组不允许拷贝和赋值数组更容易越界获取数组的长度不方便数组的数组结束语 前言 数组和vector一样可以存放任意对象,除了引用,即不存在引用的数组,也不...
  • 详解STL——vector容器

    2021-05-25 10:40:01
    文章目录vector简介vector的常用构造函数演示1演示2演示3vector的迭代器图示 vector简介 vector是一个灵活的数组的序列容器。和一般数组一样,vector对元素使用连续的存储位置,这一位这它也可以使用指向其元素的...
  • vector.size() 究竟会对循环带来多大的影响 这篇文章是基于我自己对c++中vector遍历的一些使用思考,其中的测试也可能比较粗糙。如果你有兴趣,可以选择性地接受,或者自己再进行更多的实验。 很久之前就在想这个...
  • 一、什么是vector? 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。 二、...
  • 近来,基本上所有现代编程语言都有一种对一个区间写for...vector> #include <map> using namespace std; int main() { vector<int> num{3, 7, 1, 7, 9}; // 修改你正在迭代的容器的值,或者你想避
  • 博客一:转载自...那么,在一个成熟的类库里面,它的实现是怎么的呢?也许平时我们实践的时候也会尝试着去写一个stack的实现玩玩。这里,我们就仔细的分析一下jdk里的详细实现。Stack如果我们去查j...
  • vector 基本使用 vector 是 C++ STL 中最常用的容器, 也是面试中的常见考点. 以下内容向大家介绍 vector 的最常见用法. 1. 头文件 vector 是标准库中的组件. 使用时需要包含相关头文件. #include <vector> 2....
  • C++ Standard Library 之vector介绍 【简介】 C++标准库中的vector是表示数组的序列容器,大小可以改变。 vector是一种标准容器,它提供对任意顺序的单个元素的固定时间访问。 vector将元素赋值到...
  • 项目中会经常用到返回的箭头,或者是跳转下一页的箭头,但是为了方便,不用添加那么多图片,我一般选择矢量图xml去设置,一劳永逸,但是呢,...超过100就有变回去了 调整后的效果,怎么是不是变得苗条了许多呢。
  • -- vectorTile --> <dependency> <groupId>no.ecc.vectortile</groupId> <artifactId>java-vector-tile</artifactId> <version>1.2.1</version> </dependency> 注意 locationtech 和 vividsolutions有的类名完全一致...
  • OCSVM经典论文“Schölkopf et al , Support Vector Method For Novelty Detection”的阅读笔记
  • 欢迎来到c++基础系列。 在之前的博客我们介绍了c++的string 类 ,并且对string 进行了部分模拟实现。...目录vector 介绍vector 使用 vector 介绍 vector 是序列容器,表示可以更改大小的数组 vector 使用 ...
  • 今 天写程序的时候要给一个模块的dll传递一个参数,由于参数数量是可变的,因此设计成了vector类型,但调试过程中发现 在exe中的参数传递到dll中的函数后,vector变成空的,改成传引用类型后,vector竟然变得很大,...
  • 文章目录 Support Vector Machine Hinge Loss Binary Classification ideal loss square loss sigmoid+square loss sigmoid+cross entropy cross entropy VS square error Hinge Loss Linear SVM model description ...
  • Vector、ArrayList、LinkedList的区别 一般差别 Vector: 是Java早期提供的线程安全的动态数组。内部使用对象数组来保存数据,可以自动增加容量,当数组已满是,会创建新的数组,并拷贝原有数组数据。 ArrayList: 由...
  • } 总结: find查找是从左往后,rfind从右往左 find找到字符串后返回查找的第一个字符位置,找不到返回-1 replace在替换时,要指定从哪个位置起,多少个字符,替换成什么的字符串 string字符串比较 字符串之间的...
  • 1.Vector中的属性 2.Vector中的方法 2.1 构造方法 2.2 grow方法 2.3 其他方法 1.Vector中的属性 Vector中的属性其实跟ArrayList时差不多的,就比ArrayList多了一个 protected int capacityIncrement; 这个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,396
精华内容 19,358
关键字:

vector怎么样