草庐IT

insert_at_end

全部标签

c++ - 理论上,find_end 是可并行化的吗?

我目前正在研究open-stdproposal为我正在处理的项目带来并行功能,但我遇到了find_end的障碍。现在find_end可以描述为:Analgorithmthatsearchesforthelastsubsequenceofelements[s_first,s_last)intherange[first,last).Thefirstversionusesoperator==tocomparetheelements,thesecondversionusesthegivenbinarypredicatep.它的要求由cppreference列出.现在我并行化find/findi

c++ - 为什么 std::vector::insert 复杂度是线性的(而不是恒定的)?

假设我在std::vector中的第'i'个位置插入p个新元素|大小为“n”。自std::vector中的项目保证为其元素使用连续的存储位置,这似乎需要我执行上述4个步骤:1)如果空间不足,可能会重新分配vector,基本上是将其大小加倍。但这是一个恒定时间操作(尽管非常大)。2)接下来是从索引0到i-1的元素从旧vector到新vector的memcpy。3)然后你复制'p'个新项目被插入到第i个索引处。4)然后是从旧vector到新vector的从i+1到n索引的所有项目的另一个memcpy。以上不都是常数时间操作吗?那么插入本身不应该是一个恒定时间的操作吗?为什么是std::ve

C++ : How can I solve a first-chance exception caused at an unknown point?

我正在处理的一个C++项目在抛出第一次异常时终止。当我第一次尝试访问map,int>时,这发生在处于Debug模式的VisualStudio2008中其中包含单个键值对。代码在逻辑上没有任何错误。我已经阅读了有关第一次机会异常的信息,并且了解它们可能并不总是有问题。尽管如此,我尝试打破所有此类异常,并且正如预期的那样发现生成了几个不会导致问题的异常。我正在处理的类非常大并且包含许多自定义内存分配。我推测其中之一以某种方式导致了问题。然而,我花了几个小时试图找到一种方法来确定问题出在哪里,但一直无法做到。下面列出了第一次异常输出。这不是很有帮助!First-chanceexception

c++ - C++ 中 vector 的 insert 和 emplace 有什么区别

这个问题在这里已经有了答案:push_backvsemplace_back(7个答案)C++std::vectoremplacevsinsert[duplicate](2个答案)关闭9年前。除了使用emplace的单次插入和使用insertinvector的多次插入外,它们的实现还有其他区别吗?在这两种情况下,插入任何元素都会移动所有其他元素。

c++ - end() 迭代器的算术运算

设A为std::vector,这是明确的吗?if(!A.empty())std::vector::iteratormyBack=A.end()-1;是end迭代器只适用于等式和不等式检查?或者只要我留在容器中,我就可以执行一些指针运算?在我的平台上,此代码有效。我想知道这是否是可移植的。 最佳答案 它是完全有效的,因为vector::iterator是一个随机访问迭代器。您可以对其执行算术运算,并且它不依赖于平台。std::vector::iteratorit=A.end();while(it!=A.begin()){--it;//

c++ - 从 back_insert_iterator 中提取容器的 value_type 的特征类

std::back_insert_iterator的value_type等于void,但它还有一个protected成员container包含指向底层Container的指针。我正在尝试编写一个traits类来提取容器的value_type,如下所示:#include#include#includetemplatestructoutit_vt:OutputIt{usingself_type=outit_vt;usingvalue_type=typenamestd::remove_pointer_t().container)>::value_type;};intmain(){std::v

C++14 元编程 : Automagically build a list of types at compile/init time

使用C++14和CuriouslyRecurringTemplatePattern(CRTP)以及可能的Boost.Hana的某种组合(或boost::mpl如果您愿意),我可以在编译时(或静态初始化时)构建一个类型列表而无需显式声明吗?例如,我有这样的东西(在Coliru上查看):#include#include#includenamespace{structD1{staticconstexprautoval=10;};structD2{staticconstexprautoval=20;};structD3{staticconstexprautoval=30;};}intmain(

c++ - c++17 中 std::destroy_at() 的用法?

我有一个简单的代码片段,它试图使用std::destroy_at()释放内存:#include#includeusingnamespacestd;classbase{public:~base(){cout有人可以指导我如何使用destroy_at()来释放内存吗?对于原始数据类型也观察到相同的行为。使用最新的VS2017编译器。 最佳答案 std::destroy_at()并不意味着根据[specialized.destroy]p1释放内存它旨在调用对象的析构函数:templatevoiddestroy_at(T*location)

c++ - std::begin 和 std::end 不能使用指针和引用,为什么?

为什么std::begin()和std::end()使用数组而不是指针[这几乎是数组]和数组的引用[这是原始数组的别名]。挠头15分钟后,我无法在谷歌中得到任何东西。下面只有第一种情况有效,第二种和第三种情况无效,这可能是什么原因?#include#include#include#includeintmain(){intfirst[]={5,10,15};//FistCaseif(std::find(std::begin(first),std::end(first),5)!=std::end(first)){std::cout错误:error:nomatchingfunctionfor

c++ - 当索引不是整数常量表达式时,不要使用数组下标;使用 gsl::at() 代替

我试图在MicrosoftVisualStudio中创建一些示例代码,看起来像这样intmain(){constsize_tsize=10;intarr[size];for(size_ti=0;i现在JetBrainsResharperC++在arr[i]=i;行发出以下警告Donotusearraysubscriptwhentheindexisnotanintegerconstantexpression;usegsl::at()instead我不明白这意味着什么以及如何解决这个警告。因为这是我经常使用的方案,所以我有点担心警告。谁能给我建议或指出正确的方向?编辑:将循环更改为:for