草庐IT

c++ - 一个 vector 中的两种类型的值 C++

假设我有一个学生类(class)的vector,但问题的要求是我不能在构造函数中将成绩放在一起,所以我将不得不解决它。有没有可能我在一个vector槽中有两个值?例如,类Student和字符串grade是我的参数。vectorStudents;所以,在一天结束时,如果我计算出vector,我应该在一个槽中得到学生和成绩。这个有用吗?如果是这样,我该如何push_back值?否则,还有其他方法吗? 最佳答案 std::vector>students;甚至更好:std::mapstudents;插入值(value)观:第一种情况:stu

c++ - 如何将来自 std::vector<short> 的数据存储在 std::vector<uint8_t> 中

我想做的是将数据存储在std::vector中在std::vector,将每个short分成两个uint8_t值。我需要这样做,因为我有一个只会发送std::vector的网络应用程序的,所以我需要转换为uint8_t以发送,然后在收到uint8_tvector时转换回来。通常我会做的(以及我在查找问题时看到的)是:std::vectornewVec(oldvec.begin(),oldvec.end());但是,如果我理解正确,这将采用每个单独的短值,截断为uint8_t的大小,并在我想要的相同时创建一个包含一半数据量和相同条目数的新vector条目数量翻倍的数据量。包含逆向过程的方

c++ - 带有复制构造函数的 enable_if

我第一次尝试std::enable_if并且很挣扎。任何指导将不胜感激。作为玩具示例,这是一个简单的静态vector类,我想为其定义一个复制构造函数,但行为取决于vector的相对大小:只需将数据复制到更小或相同大小的vector中将数据复制到一个更大的vector中,然后用零填充其余部分所以vector类是:templateclassVector{double_data[_Size];public:Vector(){std::fill(_data,_data+_Size,0.0);}constdouble*data()const{return_data;}//...};复制构造函数应

c++ - 为什么STL要为Allocator预留接口(interface)?

STL为什么要为Allocator预留接口(interface)?以vector为例:template>classvector;因为我们有很多选择来分配内存和构造对象,比如operatornew,delete,new[],delete[],它几乎可以做我们创建对象时需要做的任何事情。那么,为什么像vector这样的STL容器需要一个Allocator接口(interface),如果我们不分配一个,它在大多数情况下都是默认的std::allocator?为什么不直接使用新的表达式呢?如果目的是使用户定义的分配行为成为可能,为什么不让用户提供他们自己定义的operatornew、new[]

c++ - 为什么我在 C++ 中收到针对此基于范围的 for 循环的警告?

我目前正在使用BjarneStroustrup的书(第2版)自学C++。在其中一个示例中,他使用range-for-loop来读取vector中的元素。当我为自己编写和编译代码时,我收到了这个警告。当我运行代码时,它似乎在工作并计算平均值。为什么我会收到此警告,我应该忽略它吗?还有,为什么range-for在例子中使用了int而不是double,但仍然返回一个double?temp_vector.cpp:17:13:warning:range-basedforloopisaC++11extension[-Wc++11-extensions]这是代码#include#includeusi

c++ - 无法在声明时使用初始化列表初始化 const char*/string 数组的 vector

最初我开始尝试在声明时使用初始化列表初始化constchar*[3]的vectorvectorv={{"a","b","c"}};这给出了错误matrixmustbeinitializedwithabrace-enclosedinitializer我觉得可能是constchar*的缘故,虽然看起来很奇怪,改成了字符串vectorv={{"a","b","c"}};但是错误依然存在。我尝试了几种牙套组合都无济于事。是否真的可以在声明时使用初始化列表初始化此结构? 最佳答案 编译失败因为std::vectorrequiresitsTto

c++ - 使用构造函数更改 vector 类型?

我有一个充满整数的vector。我有一个以整数作为构造函数的类。我想创建一个充满此类的新vector,使用第一个vector中的值作为每个vector的构造函数。我觉得我目前的方法可以大大优化。vectorintegers=/*something...*/;vectorclazzes();for(auto&n:integers){clazzes.emplace_back(clazz(n));} 最佳答案 有aconstructorstd::vector接受范围并允许用户定义的转换。这就是您所需要的:templatevector(In

c++ - 引用二维 vector 中的元素 (c++)

我在粒子系统中有一个名为Spring的类。构造函数如下所示:Spring(Particle&_a,Particle&_b);我有一个粒子vector,我使用SpringmySpring=Spring(myParticles.at(j),myParticles.at(j+1));在循环内添加两个粒子之间的Spring力。到目前为止一切正常。但是,我想使用粒子的二维vector。即:SpringmySpring=Spring(myParticles.at(i).at(j),myParticles.at(i).at(j+1));而且我没有得到对粒子的引用。在第一个示例中,每当我更改sprin

c++ - vector 相关的内存分配问题

我遇到了以下错误。我有一个类Foo。此类的实例存储在classB的std::vectorvec中。在Foo类中,我通过使用new分配内存并在~Foo()中删除该对象来创建A类的实例。代码可以编译,但我在运行时遇到了崩溃。如果我从Foo类的析构函数中禁用deletemy_a。代码运行良好(但会出现内存泄漏)。有人可以解释这里出了什么问题并提出修复建议吗?谢谢!classA{public:A(intval);~A(){};intval_a;};A::A(intval){val_a=val;};classFoo{public:Foo();~Foo();voidcreateA();A*my_a

涉及 vector 的C++内存分配问题

vectorvect;int*int_ptr=newint(10);vect.push_back(*int_ptr);我知道每个"new"都需要在某个时候跟一个“删除”,但是clear()方法是否会清除此内存?这种做同样事情的方法怎么样:vectorvect;intint_var=10;vect.push_back(int_var);据我所知,clear()调用变量析构函数,但此示例中的两个vect.push_back()方法都将一个对象推送到vector上,而不是指针。那么使用int指针的第一个示例是否需要clear()以外的东西来清理内存? 最佳答案