草庐IT

vector_c

全部标签

c++ - 当此构造函数采用初始化列表并委托(delegate) vector 时,是什么导致此构造函数委托(delegate)给自身?

#include#includestructtest{usingt=std::vector;test(tconst&v){}test(t&&v){}test(std::initializer_listv):test{t{v}}//error{}};两者都是Clang和GCC提示第三个构造函数,即采用初始化列表的那个,委托(delegate)给自己。我不明白这是怎么可能的,因为你不能从vector构造一个初始化列表。通过用圆括号替换外部花括号来修复错误是微不足道的,但为什么这首先会成为一个问题?这个几乎相同的程序编译得很好:#includestructa{};structb{};stru

c++ - `std::shuffle` 是否保证不同 vector 上相同种子的相同顺序?

我有两个元素数量相同的vector,但它们的类型大小完全不同。我需要对它们进行洗牌,以便在洗牌后两者具有完全相同的顺序(一个vector中的每个元素都与另一个vector中的每个元素相关)。我发现这样做的方式是://sizeof(a[0])!=sizeof(b[0])//a.size()==b.size(){std::mt19937g(same_seed);std::shuffle(a.begin(),a.end(),g);}{std::mt19937g(same_seed);std::shuffle(b.begin(),b.end(),g);}我可以放心两个vector将以相同的方式

c++ - 获取非专用 std::vector<bool> 容器的标准方法

是否有一种标准方法(或至少是半标准的,在所有流行的编译器中实现)来获得非专用、非优化、连续的std::vector容器?我有一些处理std::vector的通用代码假设它们都是这样的标准的、连续的容器。我目前的解决方法是使用std::vector它只存储0和1,这正是我想要的内容,但拥有正确的vector类型会更好。 最佳答案 作为解决方法,您可以使用其他类型,char会出现在您的脑海中。否则你可以围绕bool编写一个包装器,比如:structmy_bool{operatorbool()const{returnb;}operator

C++ 结构对齐和 STL vector

我有一个672字节长的遗留数据结构。这些结构按顺序存储在一个文件中,我需要读入它们。虽然我可以一个接一个地阅读它们,但最好这样做://IknowinadvancehowmanystructstoreadinvectorbunchOfStructs;bunchOfStructs.resize(numberOfStructs);ifstreamifs;ifs.open("file.dat");if(ifs){ifs.read(&bunchOfStructs[0],sizeof(MyStruct)*numberOfStructs);}这行得通,但我认为它之所以行得通,是因为数据结构的大小恰好

c++ - 在扩展期间将 vector 成员插入 vector : vector. push_back(vector[0])

我正在用C++编写自定义vector类。我对这样的代码有疑问:vectorvec;vec.push_back(one);vec.push_back(two);vec.push_back(vec[0]);push_back的定义如下:voidpush_back(constT&v)避免不必要的复制。它的实现看起来像if(size==capacity){allocatenewstoragecopyoldvaluesintonewstorage//2deleteoldstoragefixpointersandcounters}//1copyvattheendofstorage如果我们想压入已经

c++ - 如何替换某些范围的 std::vector 数据

std::vectorv;v.push_back('a');v.push_back('b');v.push_back('c');v.push_back('d');v.push_back('e');v.push_back('f');charc[3]={'z','x','y'};//Wanttomakeabzxyf//v.insert(v.begin()+2,c,c+3);//itdoesn'tworkasIwanted.//Yesitworks.butifcismorebigger,itwillbecrash.std::copy(c,c+3,v.begin()+2);v.clear();

c++ - 为什么 std::vector::resize(n, src) 按值传递?

和标题差不多。std::vector::resize的规范似乎需要src对象按值传递:voidresize(size_typen,Tsrc=T());为什么这里不使用对常量对象的引用?voidresize(size_typen,Tconst&src=T());例如,在thisquestion中,由于在堆栈上创建临时对象,按值传递方面似乎会导致stackoverflow问题。如果引用src相反,我们至少可以通过在堆上分配一个临时文件来解决这个问题,该临时文件通过引用传递给::resize().似乎::resize()与std::vector的其他成员函数不同步.例如,构造函数采用src对

c++ - std::vector 的自包含、STL 兼容实现

VisualStudio2010及更早版本附带的std::vector的实现具有众所周知的特殊性:resize方法具有以下签名(C++03兼容):voidresize(size_typenew_size,value_typevalue);代替大多数其他STL实现(如gcc的STL或STLport)早在C++11之前就使用的符合C++11的签名:voidresize(size_typenew_size,constvalue_type&value);第一个变体的问题是,在某些情况下,如果value_type具有对齐规范,它将无法编译:struct__declspec(align(64))S

c++ - 如何将 std::vector<std::reference_wrapper<T>> 转换为 std::vector<T>

我有一个本地std::vector>现在我想返回其元素的真实拷贝(即std::vector)。有没有比循环更好的方法?例子:std::vectorfoobar(){std::vector>refsToLocals;/*dosmthwithrefsToLocals*/std::vectorcopyOfLocals;for(autolocal:refsToLocals)copyOfLocals.insert_back(local.get());returncopyOfLocals;} 最佳答案 看来,最明显的方法是构造一个std::ve

c++ - 使用 std::tuple 构建基于 vector 的数据集请引用 variadic-templates

我想制作一个类模板如下:templateclassVectorTuple;例如,VectorTuple将实例化为Tuple,vector,vector>我对可变参数模板不熟悉。最糟糕的方法是从中复制代码并修改它。有没有一种简单的方法可以直接使用std::tuple来定义我的VectorTuple。 最佳答案 如果您正在寻找typedefvariadic-templates类型,那么,templateusingVectorTuple=std::tuple...>;现在你可以像这样使用它了VectorTupleobj;