草庐IT

c++ - 将 Boost.Proto 语法与类型匹配

我试图在Boost.Proto中创建一个匹配vector类型的语法,但是当我给它一个该类型的终端时,它与语法不匹配。类型定义如下所示:templatestructvector{typedefTscalar;enum{size=D};scalar&operator[](unsignedi){returnm_components[i];}scalarconst&operator[](unsignedi)const{returnm_components[i];}private:scalarm_components[size];};我试图匹配的语法看起来像这样:namespaceproto=b

c++ - 如何使用运算符<<打印类对象

我想为AutoData类编写一个打印函数,其中包含有关汽车的信息。使用此打印功能,理想情况下我想打印出一个包含许多不同类对象的vector。我已经为对象的每个元素编写了get函数,但我仍然不确定如何使用这些函数编写一个函数来以下列格式打印出数据:mpg:cylinders:displacement:horsepower:weight:acceleration:modelYear:origin:carName例如:10.0:8:360.0:215.0:4615.:14.0:70:1:fordf25010.0:8:307.0:200.0:4376.:15.0:70:1:chevyc2011

C++11 将 vector 传递给构造函数

我整天都在阅读有关传递参数的最有效方法的文章,但我感到很困惑。我想传递这样的vector:Foof({1,2,3});我只想用传递的vector初始化我的_member变量。现在的问题是我的构造函数应该如何看://passbyvalueFoo(vectorvec):_member{vec}{}//constreferenceFoo(constvector&vec):_member{vec}{}//rvaluereferenceFoo(vector&&vec):_member{std::move(vec)}{} 最佳答案 最简单的方法

c++ - 前向声明类型上的 std::vector

以下代码似乎可以在Clang++和GCC上正常工作:#includeclassA{private:inti;std::vectorchildren;public:A&add();};A&A::add(){children.emplace_back();returnchildren.back();}intmain(){Aa;A&a2=a.add();}当数据成员std::vector已声明,A仍然是一个不完整的类型。使用std::vector时相同和B仅使用classB;向前声明.它应该与std::vector一起使用因为它只包含一个指向-A的指针.这是保证有效,还是未定义的行为?

c++ - 错误 : no type named 'vector' in namespace 'std'

为什么会这样?error:notypenamed'vector'innamespace'std';didyoumean'hecto'?voidaskForVector(std::vector*vector);#include#includevoidaskForVector(std::vector*vector);intmain(){std::vectorvector;intsize;askForVector(&vector);std::cout>size;vector->resize(size);for(inti=0;i>vector[i];}for(intj:*vector)std:

c++ - 错误 C2719 : '_Val' : formal parameter with __declspec(align ('16' )) won't be aligned?

我正在尝试为D3DXMATRIXA16创建一个vector像这样:vectormatrices;并收到错误:d:\ProgramFiles\MicrosoftVisualStudio9.0\VC\include\vector(717):errorC2719:'_Val':formalparameterwith__declspec(align('16'))won'tbealignede:\projects\emuntitled\em\emscratch\emshadow.h(60)::seereferencetoclasstemplateinstantiation'std::vector

c++ - 具有随机数据访问的压缩 vector/数组类

我想制作“压缩数组”/“压缩vector”类(详情如下),它允许随机数据访问或多或少的常数时间。“或多或少恒定时间”意味着虽然元素访问时间不是恒定的,但当我接近数组的某个点时它不应该继续增加。IE。容器不应该做更多的计算(比如“再次解压所有东西以获得最后一个元素”,以及“几乎不做任何事情来获得第一个元素”)来获得一个元素。可以通过将数组拆分为压缩数据block来实现。IE。访问一个元素应该采取"averageTime"+-一些偏差。我可以说我希望最好情况下的访问时间和最坏情况下的访问时间相对接近平均访问时间。我有哪些选择(合适的算法/已经可用的容器-如果有的话)?容器详细信息:容器充当

c++ - 不是从 .begin()ing 迭代一个 STL 容器并环绕

我有一个std::vector,为了简单起见,让我们说整数。std::vectorivec;ivec.push_back(1);ivec.push_back(2);...//omittingsomepushback's3to99ivec.push_back(100);迭代的标准方式是已知的std::map::iteratorit;for(it=ivec.begin();it!=ivec.end();it++)print();该迭代将打印1,2,3,...100。我想从预定义的索引开始遍历所有vector元素,而不是从it.begin()开始。我要打印3,4,5,6...99,100,1

c++ - std::vector 的复制构造函数如何操作?

std::vector是如何运作的?调用以下代码时初始化自身std::vectororiginal;std::vectornewVector=original;似乎复制构造函数会在std::vectornew上被调用。在newVector=original期间,但是std::string怎么样?在orginal里面带过来?它们是拷贝还是新的std::string的?newVector[0]中的内存也是如此与original[0]相同.我问的原因是说我做了以下事情#include#includeusingnamespacestd;vectorglobalVector;voidInitia

c++ - O(1) 中 unordered_set 中的随机元素

我见过有人提到可以在O(1)时间内从unordered_set中获取随机元素。我试图这样做:std::unordered_settest_set;//fillwithdatasize_tindex=rand()%test_set.size();constTestObject*test=*(test_set.begin()+index);但是,unordered_set迭代器不支持带有整数的+。begin可以指定一个size_t参数,但它是桶的索引而不是元素。随机挑选一个桶然后随机挑选其中的一个元素会导致非常不平衡的随机分布。适当的O(1)随机访问的秘诀是什么?如果重要的话,这是在VC+