草庐IT

电容量

全部标签

c++ - 删除元素后 std::string 容量保持不变,那么它是否占用了一些内存?

下面这段代码:stringa="abc";cout...输出:33即使我从字符串中删除一些元素,容量也保持不变。所以我的问题是:是否有一些内存因为容量问题而被占用?如果我没有明确地reserve()怎么办?如果我使用reserve()并且没有用完整个容量,我是不是在浪费内存?如果需要,这些额外的内存(我没有使用)是否会分配给其他东西?编辑:假设我有stringa="something";a="ab";现在我知道a永远不会超过两个字符。那么调用reserve(2)这样内存就不会被浪费是明智的吗? 最佳答案 我先回答你的问题:内存属于字

C++ - getline 是否有最大字符串或字符容量?

我的问题是关于我正在处理的作业。似乎有多种方法可以完成任务。我正在编写的程序将是文本文件的过滤器。作业的目的是获得使用fstream和getline的经验。要求:读取一个文本文件(任何可能的方式,不必一次全部读取)写入一个单独的文本文件(任何可能的方式,可以逐字符追加或写入)假定每个句子都以句号结尾。每个句子的第一个字母必须大写。每个句子中除第一个字母外的所有字母都必须小写。(专有名词也是如此——这是一个微不足道的例子)我有一个我编写的程序的工作草稿,但getline读取我的文本文件的方式不一致。基本上,它会将一行作为字符串读入,这就是我想要的。正如它在第二行中所读的那样;然而,该程序

c++ - 保留容量会导致两次分配还是一次分配?

std::vectorvec;//line#1vec.reserve(100);//line#2我想知道第1行是否触发了一个小的分配(例如,10Ts的内存),或者第一个分配是否发生在第2行。标准对此有任何说明吗? 最佳答案 它是实现定义的。vector的默认构造函数不需要分配任何东西,但实现这样做是允许的。 关于c++-保留容量会导致两次分配还是一次分配?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

c++ - 在将大小较大的 vector move 到容量较小的 vector 之前,是否可以通过使用 reserve() 来提高代码性能?

如果这个问题不完整、不清楚或重复(这是我的第一个问题),请提前道歉。在研究move语义和为我的OOP类(class)做一个小项目时,我偶然发现了一个我自己无法回答的问题。据我所知std::move()通过将l值转换为r值来工作,但假设我们将一个包含很多元素的vectormove到容量为1的第二个vector中。我可以使用reserve()避免由于std::move()将r值move到第二个vector中,第二个vector的大量自动内存重新分配或者使用reserve()没有效果?可以在下面找到我的问题的简单实现。#include#include#includeintmain(){std

c++ - std::string 容量大小

字符串的容量大小总是15的倍数吗?例如:在所有情况下容量都是15strings1="Hello";strings2="Hi";strings3="Hey";还是随机的? 最佳答案 Isthecapacitysizeofstringalwaysamultiplevalueof15?没有;关于std::string容量的唯一保证是s.capacity()>=s.size()。一个好的实现可能会以指数方式增加容量,以便每次需要重新分配底层数组时它的大小都会加倍。这对于std::vector是必需的,因此push_back可以具有摊销常数时

C++ OpenCV cv::Mat 的最大存储容量

在我的程序中,我加载了一些图像,从中提取了一些特征并使用cv::Mat来存储这些特征。根据我知道的图像数量,cv::Mat的大小为700.000x256(行x列),约为720Mb。但是当我运行我的程序时,当它达到大约400.000x256(400Mb)并尝试添加更多时,它只会因fatalerror而崩溃。谁能确认400Mb确实是cv::Mat存储容量的限制?我应该检查更多问题吗?解决这个问题的可能方法? 最佳答案 挖掘源代码,使用push_back:它检查是否有足够的空间容纳新元素,如果没有,它会重新分配矩阵,空间为(current

c++ - "reserve or shrink"的正确方法指向已知 future 容量需求的 vector

我已经围绕一个长期存在的vector的共同主题编写了无数软件模块,有时(以未指定的频率)必须更新其内容。惯用语实现:voidLongLived::reconfigure(constInputT&whatever_input){m_vector.clear();m_vector.reserve(whatever_input.size());populate(m_vector,whatever_input);}请注意,惯用的实现方式永远不会减少其内部缓冲区的容量。如果这不行怎么办?只需使用shr​​ink_to_fit(),我想:voidLongLived::reconfigure(con

c++ - std::vector 的容量会减少吗?

C++14finalworkingdraft对std::vector做出以下评论:Storagemanagementishandledautomatically,thoughhintscanbegiventoimproveefficiency.cppreference说:Thestorageofthevectorishandledautomatically,beingexpandedandcontractedasneeded.和WikipediaentryforDynamicarray说:C++'sstd::vectorandRust'sstd::vec::Vecareimplemen

c++ - pop_back() 可以减少 vector 的容量吗? (C++)

根据C++标准,是std::vector::pop_back()曾经允许减少vector的容量吗?我问是因为我想得到保证,以下代码不会抛出内存不足异常:my_vec.pop_back();if(...)my_vec.push_back(...);假设my_vec是一个std::vector.我猜有三种可能:是的,根据C++03和C++11这可能发生。不,C++11禁止这样做(但C++03不禁止)。不可以,C++03和C++11都禁止这样做。是的,我的问题与Doesstd::vector.pop_back()changevector'scapacity?有关,但我的问题具体是关于标准保证

c++ - 为什么在达到容量后在 vector 中完成插入时 C++ 不处理迭代器?

我写这段小代码只是为了看看迭代器实际上是如何失效的,并且在达到其容量后不指向vector的更改位置。这里vector和capacity的大小最初都是5。之后,我在vector中插入了一些其他元素,并且没有重新初始化我的迭代器以指向myvector.begin()。当再次打印vector的元素时,这会导致maximumsizeofvectoris:1073741823在我的输出中出现垃圾值49。我的问题是,为什么在所有元素都被复制到新位置后,C++没有再次将点迭代器指向有效的myvector.begin()?这也可能导致一些难以调试的行为。我知道一种安全的工作方式是始终在使用迭代器之前重