草庐IT

EidosValue_Int_vector

全部标签

c++ - 在 vector 中复制类时调用构造函数

我有以下代码classbase{private:intk;public:base(constbase&b){this->k=b.k;coutvec={b,b1};cout输出:1-a=102-a=23-c-ctor4-c-ctor5-c-ctor6-c-ctor7-checkpoint8-109-2谁能解释一下为什么4次调用复制构造函数,我理解在容器中复制对象时有2次调用。怎么4? 最佳答案 原因是初始化vectorvec={b,b1};创建一个std::initializer_list并将其传递给适当的vector构造函数。然后继

c++ - 有没有比添加 0.5f 和截断转换更直接的方法来将 float 转换为 int 并进行舍入?

在处理浮点数据的C++代码中,从float到int的舍入转换经常发生。例如,一种用途是生成转换表。考虑这个代码片段://ConvertapositivefloatvalueandroundtothenearestintegerintRoundedIntValue=(int)(FloatValue+0.5f);C/C++语言将(int)转换定义为截断,因此必须添加0.5f以确保向上舍入到最接近的正整数(当输入为正时)。对于以上,VS2015的编译器生成如下代码:movssxmm9,DWORDPTR__real@3f000000//0.5faddssxmm0,xmm9cvttss2siea

c++ - 为什么 uint8_t + uint8_t 会产生一个 int?

这个问题在这里已经有了答案:Additionoftwocharsproducesint(3个答案)关闭3年前。我注意到,对于8位变量的简单操作,变量在操作完成之前转换为32位int,然后再转换回8位变量。例如,这个C++程序:#include#includeintmain(void){uint8_ta=1;uint8_tb=2;std::cout产生以下输出:sizeof(a)=1sizeof(b)=1sizeof(a+b)=4所以我们可以理解发生的事情是:uint8_tc=(uint8_t)((int)(a)+(int)(b));显然,它似乎在this中所说的C规范中。论坛。此外,在

c++ - 统一初始化int* : how can it be forced?

以下代码无法使用clang++3.8.0和g++6.3.0进行编译(编译器标志为-std=c++11-Wall-Wextra-Werror-pedantic-errors):intmain(){int*a=int*{};//doesn'tcompile//^^^^can'tbeparsedasatype(void)a;usingPInt=int*;PIntb=PInt{};//compilessuccessfully//^^^^isparsedasatype(void)b;}这是一种强制编译器以正确方式解释int*{}的方法吗(typedefingofint*是其中一种方式)?

c++ - 是否可以将 vector 的一部分作为 vector 发送给函数?

这个问题在这里已经有了答案:HowcanIpassapartofavectorasafunctionargument?(7个答案)关闭5年前。我想看看是否可以将vector的一部分传递给函数,以便它显示为函数的法线vector。更重要的是,我希望这在O(1)常数时间内完成。我不想迭代vector来制作一个新vector。事实上,我也想在下面的例子中将新vector的大小更改为40。voidfunc(vector&v){//callingindex10to50ofvfunc(v[10..50])}

C++:偏移到 std::vector 迭代器的正确转换是什么?

我有一个函数,它接受double的std::vector,并将它们复制到另一个vector,但在特定的偏移量处(假设有足够的空间):voidcopy_stuff(conststd::vector&data,std::vector&dest,size_tdest_offset){std::copy(data.begin(),data.end(),dest.begin()+dest_offset);}这导致C++11clang编译器-Weverything警告集中在+dest_offset部分:Implicitconversionchangessignedness:'size_t'(aka

c++ - 用双花括号初始化 vector<string>

有人可以解释下例中使用双花括号和单花括号初始化的行为差异吗?代码#1:vectorv={"a","b"};stringc(v[0]+v[1]);cout输出#1:c=abc.c_str()=ab代码#2:vectorv={{"a","b"}};stringc(v[0]+v[1]);cout输出#2:c=a\acke�Z\c.c_str()=a 最佳答案 隐式转换中心。这就是正在发生的事情。vectorv={"a","b"};您可以通过提供包含两个元素的初始化列表来初始化vector。两个std::strings从字符串文字初始化,然

c++ - set::vector 初始化用数字引号

所以我想到了一个关于std::reduce的问题,这让我想到了一个例子。cppreference.com在这个例子中,我看到了以下std::vector声明:std::vectorv(10'000'007,0.5);这些引用在这里做什么?我以前从未在任何地方见过这个。这是我应该了解的一种新型C++功能吗? 最佳答案 这是C++14的新特性。来自cppreference:Optionalsinglequotes(')maybeinsertedbetweenthedigitsasaseparator.Theyareignoredbyth

c++ - 是否需要将 delete 用于在 vector 中创建的新数组?

我正在尝试为void**数据数组创建一些动态数组。std::vectordata;data.push_back(newdouble[1024]);//arrayofdoublesdata.push_back(newshort[1024]);//arrayofshorts为了清理我应该只使用data.clear();或者是否需要删除每个新的(s),如果需要,如何完成? 最佳答案 ForcleanupshouldIjustusedata.clear();这将从vector中删除所有指针。如果其中任何一个是指向它们各自动态对象的唯一拷贝,

c++ - 在 C++ 中,如何制作一个可以包含相同变体 vector 的变体?

我试图制作一个std::variant可以包含相同变体的vector:classScriptParameter;usingScriptParameter=std::variant>;我正在重新定义ScriptParameter。它认为这可能是因为模板参数不能向前声明?有没有一种方法可以实现一个包含相同类型变体数组的变体? 最佳答案 因为前向声明说ScriptParameter是一个类,所以您不能使用using别名。然而,这里并没有本质上的错误,因为vector只是一个指针,没有真正的循环依赖。您可以使用继承:classScriptP