草庐IT

vector_tostr

全部标签

c++ - vector 的大小与容量?

我对此有点困惑,这两个对我来说看起来都一样。尽管可能会发生容量和大小在不同编译器上可能不同的情况。它可能有何不同。它还说如果我们内存不足,容量就会改变。所有这些我都不清楚。有人可以解释一下吗?(如果可能的话,可以举个例子,或者我可以对任何程序进行任何测试以理解它) 最佳答案 大小不允许在多个编译器之间有所不同。vector的大小是它包含的元素的数量,它直接由您放入vector中的元素数量控制。容量是vector拥有的总空间量。在引擎盖下,vector只使用一个数组。vector的容量是该数组的大小。这总是等于或大于大小。它们之间的区

c++ - 如何在 C++ 中声明原子 vector

我打算声明一个原子变量vector,用作多线程程序中的计数器。这是我尝试过的:#include#includeintmain(void){std::vector>v_a;std::atomica_i(1);v_a.push_back(a_i);return0;}这是gcc4.6.3令人讨厌的冗长错误消息:Infileincludedfrom/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:34:0,from/usr/include/c++/4.6/bits/allocator.h:48,from/usr/includ

c++ - 如何在 C++ 中声明原子 vector

我打算声明一个原子变量vector,用作多线程程序中的计数器。这是我尝试过的:#include#includeintmain(void){std::vector>v_a;std::atomica_i(1);v_a.push_back(a_i);return0;}这是gcc4.6.3令人讨厌的冗长错误消息:Infileincludedfrom/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:34:0,from/usr/include/c++/4.6/bits/allocator.h:48,from/usr/includ

c++ - 在不初始化数据的情况下调整 C++ std::vector<char> 的大小

这个问题在这里已经有了答案:Usingvectorasabufferwithoutinitializingitonresize()(6个回答)关闭6年前。使用vector,可以假设元素连续存储在内存中,从而允许将范围[&vec[0],&vec[vec.capacity())用作普通数组。例如,vectorbuf;buf.reserve(N);intM=read(fd,&buf[0],N);但现在vector不知道它包含M个字节的数据,由read()外部添加。我知道vector::resize()设置了大小,但是它也清除了数据,所以在read()之后不能用来更新大小打电话。有没有一种简单

c++ - 在不初始化数据的情况下调整 C++ std::vector<char> 的大小

这个问题在这里已经有了答案:Usingvectorasabufferwithoutinitializingitonresize()(6个回答)关闭6年前。使用vector,可以假设元素连续存储在内存中,从而允许将范围[&vec[0],&vec[vec.capacity())用作普通数组。例如,vectorbuf;buf.reserve(N);intM=read(fd,&buf[0],N);但现在vector不知道它包含M个字节的数据,由read()外部添加。我知道vector::resize()设置了大小,但是它也清除了数据,所以在read()之后不能用来更新大小打电话。有没有一种简单

c++ - 为什么 C++ 不需要 "new"语句来初始化 std::vector?

考虑:/*bar.h*/classbar{/*Standardstuffomitted*/std::vectorfoo;};/*bar.cpp*/bar::bar(){//foo=newstd::vector();为什么即使我们没有为foo分配一个新的std::vector实例,这段代码仍然有效? 最佳答案 因为C++不是C#/Java。std::vectorfoo;这是一个对象的定义,而不是C#/Java中的引用。对象是类型的一个活生生的实例。newstd::vector()这个表达式返回一个指针。它返回一个std::vector

c++ - 为什么 C++ 不需要 "new"语句来初始化 std::vector?

考虑:/*bar.h*/classbar{/*Standardstuffomitted*/std::vectorfoo;};/*bar.cpp*/bar::bar(){//foo=newstd::vector();为什么即使我们没有为foo分配一个新的std::vector实例,这段代码仍然有效? 最佳答案 因为C++不是C#/Java。std::vectorfoo;这是一个对象的定义,而不是C#/Java中的引用。对象是类型的一个活生生的实例。newstd::vector()这个表达式返回一个指针。它返回一个std::vector

C++,没有 <vector> 的对象数组

我想在C++中创建一个不使用STL的对象数组。我该怎么做?如何创建没有无参数构造函数(默认构造函数)的Object2数组? 最佳答案 如果有问题的类型有一个无参数构造函数,使用new[]:Object2*newArray=newObject2[numberOfObjects];当你不再需要数组时不要忘记调用delete[]:delete[]newArray;如果没有这样的构造函数,使用operatornew分配内存,然后就地调用构造函数://doforeachobject::new(addressOfObject)Object2(p

C++,没有 <vector> 的对象数组

我想在C++中创建一个不使用STL的对象数组。我该怎么做?如何创建没有无参数构造函数(默认构造函数)的Object2数组? 最佳答案 如果有问题的类型有一个无参数构造函数,使用new[]:Object2*newArray=newObject2[numberOfObjects];当你不再需要数组时不要忘记调用delete[]:delete[]newArray;如果没有这样的构造函数,使用operatornew分配内存,然后就地调用构造函数://doforeachobject::new(addressOfObject)Object2(p

c++ - 如何获得嵌套 vector 的维度(嵌套)(不是大小)?

考虑以下声明:vector>v2d;vector>>v3d;如何在后续代码中找出vector的“维数”?例如,2代表v2d,3代表v3d? 最佳答案 以下几行:templatestructs{enum{dims=0};};templatestructs>{enum{dims=s::dims+1};};那么例如,std::vector>x;intn=s::dims;/*nwillbe2inthiscase*/具有吸引人的特性,即所有评估都在编译时。 关于c++-如何获得嵌套vector的维