SLCoCo 发表于 2022-6-12 23:10

vector容器相关

本帖最后由 SLCoCo 于 2022-6-13 12:43 编辑

已解决:扩容根据编译器的不同每次扩容倍数不同,如果有小数则向下取整

编译器扩容倍数
GCC2
MSVC1.5
CLANG1.5

原题:这里为什么容器容量是13,百度了好久也没找到原因。#include<iostream>
#include<vector>
using namespace std;

void printVector(vector<int>& v) {

      for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
                cout << *it << " ";
      }
      cout << endl;
}

void test01()
{
      vector<int> v1;
      for (int i = 0; i < 10; i++)
      {
                v1.push_back(i);
      }
      printVector(v1);
      cout << "v1的容量 = " << v1.capacity() << endl;
}

int main() {

      test01();

      system("pause");

      return 0;
}

我心飞翔1995 发表于 2022-6-13 07:31

本帖最后由 我心飞翔1995 于 2022-6-13 07:35 编辑

你觉得应该是多少
我这边g++ 11.2.1 给出是 v1的容量 = 16

Eaglecad 发表于 2022-6-13 08:14

这个是扩容方式不同,Linux一般是2倍扩容,Windows是1.5倍扩容。具体可以百度vector的扩容机制。

only998 发表于 2022-6-13 08:24

可能是编译器自动优化?

vtor 发表于 2022-6-13 09:50

我是用vector也遇到了点问题
主要是vector是在一个结构体内,这个结构体是new出来的
往vector内塞6个数据就会触发异常,
不知道楼主有没有遇到我这个问题?

vtor 发表于 2022-6-13 09:52

capacity表达的是vector所占用的空间,不一定是你的元素个数
使用size函数,可以获得vector内元素个数

jsjrj01 发表于 2022-6-13 10:17

Eaglecad 发表于 2022-6-13 08:14
这个是扩容方式不同,Linux一般是2倍扩容,Windows是1.5倍扩容。具体可以百度vector的扩容机制。

赞同,扩容机制不用,不必深究

SLCoCo 发表于 2022-6-13 12:38

Eaglecad 发表于 2022-6-13 08:14
这个是扩容方式不同,Linux一般是2倍扩容,Windows是1.5倍扩容。具体可以百度vector的扩容机制。

谢谢大佬明白了。

SLCoCo 发表于 2022-6-13 12:40

vtor 发表于 2022-6-13 09:52
capacity表达的是vector所占用的空间,不一定是你的元素个数
使用size函数,可以获得vector内元素个数

这个我知道。我的意思是capacity算出来的容量是怎么算的(已解决)

SLCoCo 发表于 2022-6-13 12:41

vtor 发表于 2022-6-13 09:50
我是用vector也遇到了点问题
主要是vector是在一个结构体内,这个结构体是new出来的
往vector内塞6个数据 ...

这个我暂时没遇到过,我刚开始学习没多久。你可以尝试开个帖子把代码贴出来或许有大佬能帮你看看吧
页: [1]
查看完整版本: vector容器相关