草庐IT

Container

全部标签

c++ - STL映射查找线程安全

STLmap线程上的find调用安全吗? 最佳答案 不,C++规范不保证任何STL容器上操作的规范中的线程安全。如果线程安全很重要,您应该提供自己的锁定。话虽如此,不同的实现似乎提供了不同的保证。例如,大多数似乎允许多个并发读取器,只要没有同时执行写入。如果您不关心可移植性,则可以研究实现文档。例如来自here对于SGISTL:TheSGIimplementationofSTListhread-safeonlyinthesensethatsimultaneousaccessestodistinctcontainersaresafe,

C++ STL : Which method of iteration over a STL container is better?

这对你们中的一些人来说可能看起来很无聊,但是以下两种对STL容器进行迭代的方法中哪一种更好?为什么?classElem;typedefvectorElemVec;ElemVecelemVec;//Method0for(ElemVec::iteratori=elemVec.begin();i!=elemVec.end();++i){Elem&e=*i;//Dosomething}//Method1for(inti=0;i方法0看起来像更简洁的STL,但方法1用更少的代码实现了相同的效果。对容器的简单迭代是all出现在任何源代码中的位置。所以,我倾向于选择方法1,它似乎可以减少视觉困惑和代

C++ STL : Which method of iteration over a STL container is better?

这对你们中的一些人来说可能看起来很无聊,但是以下两种对STL容器进行迭代的方法中哪一种更好?为什么?classElem;typedefvectorElemVec;ElemVecelemVec;//Method0for(ElemVec::iteratori=elemVec.begin();i!=elemVec.end();++i){Elem&e=*i;//Dosomething}//Method1for(inti=0;i方法0看起来像更简洁的STL,但方法1用更少的代码实现了相同的效果。对容器的简单迭代是all出现在任何源代码中的位置。所以,我倾向于选择方法1,它似乎可以减少视觉困惑和代

c++ - 我可以将成员数据指针分配给派生类型吗?

这可能最好用示例代码来展示。以下用g++编译失败:structBase{};structDerived:publicBase{};structContainer{Deriveddata_;};intmain(void){BaseContainer::*ptr=&Container::data_;}我收到以下错误:invalidconversionfrom'DerivedContainer::*'toBaseContainer::*'.这是语言不允许的吗?这是编译器错误吗?我是否使用了错误的语法?请帮忙!关于我为什么要这样做的一些背景知识:我有几个成员数据片段,我想主要用作它们的派生类型

c++ - 我可以将成员数据指针分配给派生类型吗?

这可能最好用示例代码来展示。以下用g++编译失败:structBase{};structDerived:publicBase{};structContainer{Deriveddata_;};intmain(void){BaseContainer::*ptr=&Container::data_;}我收到以下错误:invalidconversionfrom'DerivedContainer::*'toBaseContainer::*'.这是语言不允许的吗?这是编译器错误吗?我是否使用了错误的语法?请帮忙!关于我为什么要这样做的一些背景知识:我有几个成员数据片段,我想主要用作它们的派生类型

函数参数的 C++ 类模板推导 (P0091R0)

在C++17中我们可以做类似的事情std::pairp={1,3};//compilerdeducestemplateparameterstopair来自cppreference的文档我了解以下内容将不起作用:templatevoidbar(std::pair){}voidfoo(){bar({1,3});//Nodeductionofpairtemplatearguments}谁能证实这一点并提供一些见解,为什么这不起作用?从技术上讲,这应该可行,对吧?是否进行过任何讨论以使这项工作发挥作用,或者这是一种疏忽? 最佳答案 引用是正

函数参数的 C++ 类模板推导 (P0091R0)

在C++17中我们可以做类似的事情std::pairp={1,3};//compilerdeducestemplateparameterstopair来自cppreference的文档我了解以下内容将不起作用:templatevoidbar(std::pair){}voidfoo(){bar({1,3});//Nodeductionofpairtemplatearguments}谁能证实这一点并提供一些见解,为什么这不起作用?从技术上讲,这应该可行,对吧?是否进行过任何讨论以使这项工作发挥作用,或者这是一种疏忽? 最佳答案 引用是正

c++ - STL 算法 : Why no additional interface for containers (additional to iterator pairs)?

我想知道为什么STL不会重载它们的算法函数,这样我就可以通过简单地提供一个容器而不是采用更冗长的方式来传递begin+end迭代器来调用它们。我当然理解为什么我们还想使用迭代器对来处理容器/数组的子序列,但是,几乎所有对这些方法的调用都使用了整个容器:std::for_each(myVector.begin(),myVector.end(),doSomething);我会发现只写更方便、可读和可维护std::for_each(myVector,doSomething);STL不提供这些重载是否有原因?[编辑:我的意思不是用这个受限的接口(interface)替换接口(interface

c++ - STL 算法 : Why no additional interface for containers (additional to iterator pairs)?

我想知道为什么STL不会重载它们的算法函数,这样我就可以通过简单地提供一个容器而不是采用更冗长的方式来传递begin+end迭代器来调用它们。我当然理解为什么我们还想使用迭代器对来处理容器/数组的子序列,但是,几乎所有对这些方法的调用都使用了整个容器:std::for_each(myVector.begin(),myVector.end(),doSomething);我会发现只写更方便、可读和可维护std::for_each(myVector,doSomething);STL不提供这些重载是否有原因?[编辑:我的意思不是用这个受限的接口(interface)替换接口(interface

c++ - 封闭类的模板参数的默认参数

代码:template>classstack{public:stack(){}templatestack(CTtemp):container(temp.begin(),temp.end()){}boolempty();private:container_typecontainer;};template>boolstack::empty(){returncontainer.empty();}当我编译时它给出了错误。defaultargumentfortemplateparameterforclassenclosing'boolstack::empty()'为什么编译器会提示,我怎样才能让