草庐IT

vector_tostr

全部标签

c++ - 关于在 vector 上调用 clear 如何改变容量的标准说明了什么?

本网站暗示清除vector可能会改变容量:http://en.cppreference.com/w/cpp/container/vector/clearManyimplementationswillnotreleaseallocatedmemoryafteracalltoclear(),effectivelyleavingthecapacity()ofthevectorunchanged.但根据@JamesKanze的说法,这是错误的,清除的标准要求不会改变容量。标准是怎么说的? 最佳答案 根据您正在查看的标准版本,clear被定义

c++ - Boost 程序选项中的 vector 参数

我有两个相关的问题:使用BoostProgramOptions允许传递一系列值的最简单方法是什么?我的目标是避免使用prog--opt1--opt2--opt3并改为使用prog--opt123。最简单的方法是选择恰好两个数字的选项,例如prog--opt13742?(我不需要任何“免费”程序参数。) 最佳答案 这是一个迟到的答案,但我希望它对某人有所帮助。您可以轻松地在第1项中使用相同的技术,但您需要对vector中的项数添加另一个验证:来自rcollyer的示例:namespacepo=boost::program_option

c++ - 为什么 vector 访问运算符没有指定为 noexcept?

为什么没有指定std::vector的operator[]、front和back成员函数作为noexcept? 最佳答案 noexcept标准的政策是只标记不能或不得失败的函数,而不是那些简单指定不失败的函数抛出异常。换句话说,所有具有有限域的函数(传递错误的参数并且你得到未定义的行为)都不是noexcept,即使它们没有被指定为抛出。被标记的函数是swap(不能失败,因为异常安全通常依赖于此)和numeric_limits::min(不能失败,返回一个常量原始类型)。原因是实现者可能希望为其库提供特殊的调试版本,这些版本会引发各种

C++ - 未初始化 vector 的值<int>

我从thisquestion的回答中了解到全局/静态未初始化int的值为0。thisone的答案表示对于vector,将调用对象类型的默认构造函数。我无法弄清楚-当我有vectorv(10)时会发生什么在本地函数中。int的默认构造函数是什么?如果我有vectorv(10)怎么办?全局声明?我看到的是vectorv(10)在本地函数中导致变量为0-但我不确定这是因为我的编译器还是固定的预期行为。 最佳答案 标准中将零初始化指定为内置类型的默认零初始化/值初始化,主要是为了在模板使用中仅支持这种类型的情况。请注意,此行为不同于诸如in

c++ - 为什么 C++11 会从 std::vector 的填充构造函数原型(prototype)中移除默认值?

在C++98中,std::vector的填充构造函数的原型(prototype)具有初始值设定项的默认值。explicitvector(size_typen,constvalue_type&val=value_type(),constallocator_type&alloc=allocator_type());C++11使用两个原型(prototype)。explicitvector(size_typen);vector(size_typen,constvalue_type&val,constallocator_type&alloc=allocator_type());(在C++14中

C++ std::vector emplace vs insert

这个问题在这里已经有了答案:push_backvsemplace_back(7个回答)关闭9年前。社区审核了是否重新打开这个问题2个月前并关闭:原始关闭原因未解决我想知道两者之间有什么区别。我注意到emplace是c++11添加的。那为什么要加呢? 最佳答案 Emplace接受就地构造对象所需的参数,而insert接受(引用)一个对象。structFoo{Foo(intn,doublex);};std::vectorv;v.emplace(someIterator,42,3.1416);v.insert(someIterator,F

c++ - 当我们需要存储 "the last n items"时,列表是否比 vector 更好?

有很多问题表明应该始终使用vector,但在我看来,列表更适合我们需要存储“最后n个项目”的场景例如,假设我们需要存储最近看到的5个项目:迭代0:3,24,51,62,37,然后在每次迭代中,索引0处的项被删除,并在末尾添加新项:迭代1:24,51,62,37,8迭代2:51,62,37,8,12对于这个用例,对于一个vector,复杂度似乎是O(n),因为我们必须复制n个项目,但在一个列表中,它应该是O(1),因为我们总是砍掉头部,每次迭代都添加到尾部。我的理解正确吗?这是std::list的实际行为吗? 最佳答案 两者都没有。您

c++ - 我可以使用 ' == ' 来比较两个 vector 吗?我试过了,似乎工作正常。但我不知道它是否适用于更复杂的情况

第一个例子:intmain(){usingnamespacestd;vectorv1{10,20,30,40,50};vectorv2{10,20,30,40,50};if(v1==v2)cout第二个例子:intmain(){usingnamespacestd;vectorv1{10,20,30,40,50};vectorv2{10,20,100000,40,50};if(v1==v2)cout 最佳答案 overloadofoperator==thatworksontwostd::vectors将比较vector大小并返回fal

c++ - 如何迭代常量 vector ?

我有一个包含字段名称的Studentvector。我想遍历vector。voidprint(constvector&students){vector::iteratorit;for(it=students.begin();itname这在C++中显然是非法的。请帮忙。 最佳答案 您有两个(C++11中三个)选项:const_iterators和索引(+C++11中的“range-for”)voidfunc(conststd::vector&vec){std::vector::const_iteratoriter;for(iter=v

c++ - 清除后是否释放了 std::vector 内存?

假设我有一个std::vector结构。如果vector是clear()'d,内存会发生什么?std::vectorvecs;vecs.resize(10000);vecs.clear();内存会被释放,还是仍然作为可重用缓冲区附加到vecs变量? 最佳答案 内存仍然附着在vector上。这也不仅仅是可能的。这是必需的。特别是,如果您在调用clear()后再次向vector添加元素,则vector不得重新分配,直到您添加的元素数量超过其先前大小的1000个。如果你想释放内存,通常是用一个空vector交换。C++11还添加了shri