草庐IT

EidosValue_Int_vector

全部标签

c++ - 将 3D MatND 拆分为 2D Mat opencv 的 vector

是否可以从在opencv中存储为MatND的3D数据立方体中获取2DMat对象?基本上我使用“mexopencv”将3D矩阵传递给MexFile。我使用MxArray(prhs[0]).toMatND()将矩阵转换为MatND对象。现在我想沿着第三维将这个数据立方体拆分成一个cv::Mat矩阵vector。我需要对这些2D矩阵进行操作,因此在三维上进行迭代。是否有根据需要拆分数据立方体的功能?或者获取指向3D数据立方体的2D子矩阵的指针的方法?编辑:这是我的代码,它使用mexopencv将Matlab输入参数转换为MatND数组。我实现了@chappjc将3D数据代码拆分为2D矩阵ve

c++ - 从 int 到 shared_ptr 的隐式转换

考虑下面的代码:#include#includevoidf(std::shared_ptrsp){}templateautocall_f(FuncTypef,PtrTypep)->decltype(f(p)){returnf(p);}intmain(){f(0);//doesn'tworkforanyotherint!=0,thanks@Rupesh//call_f(f,0);//error,cannotconvertinttoshared_ptr}在main()中的第一行,整数0转换为std::shared_ptr和电话f(0)成功没有任何问题。但是,使用模板调用函数会使情况有所不同

c++ - 通过 const reference 或 by value 传递 int,有什么区别吗?

这个问题在这里已经有了答案:Isitcounter-productivetopassprimitivetypesbyreference?[duplicate](7个答案)关闭7年前。当我将int和double之类的原语传递给函数时,是通过constreference传递它们更好,还是通过值传递它们更好(假设我不更改变量的值)?intgetValueFromArray(intindex){//returnthevaluefromthearray}intgetValueFromArray(constint&index){//returnthevaluefromthearray}谢谢

c++ - 对于具有所有相同组件的 SSE vector ,是动态生成还是预先计算?

当我需要执行一个vector操作,其操作数只是广播到每个组件的float时,我应该预先计算__m256还是__m128,然后加载它当我需要它时,或者每次我需要vector时使用_mm_set1_ps将float广播到寄存器?我一直在预先计算非常重要且使用频繁的vector,并即时生成不太重要的vector。但是我真的通过预计算获得了任何速度吗?值得这么麻烦吗?_mm_set1_ps是用一条指令实现的吗?这可能会回答我的问题。 最佳答案 我认为通常最好从代码(例如循环)中分离出SSEvector,并在需要时使用它,假设您注意不要不小心

C++ signed 和 unsigned int 与 long long 速度

今天,我注意到几个简单的按位和算术运算的速度在int之间有显着差异。,unsigned,longlong和unsignedlonglong在我的64位电脑上。特别是,对于unsigned,以下循环的速度大约是其两倍至于longlong,这是我没想到的。intk=15;intN=30;intmask=(1(完整代码here)以下是计时(以秒为单位)(对于g++-O、-O2和-O3):1.834207723(int)3.054731598(longlong)1.584846237(unsigned)2.201142018(unsignedlonglong)这些时间非常一致(即1%的差值)。

C++ 将 vector 拆分为 n 个 vector 的最佳方法

我有一个std::vector在这个vector中我push_back来自txt文件的字符串,如下所示:std::stringline;std::vectorpath;while(getline(fichier,line)){path.push_back(line);}我想拆分路径vector进入n其他vector例如10行。所以如果我的vector的大小是25,我想要另外2个包含10个元素的vector和一个vector5个元素。最好的方法是什么? 最佳答案 最好是一个见仁见智的问题,但您可以执行以下操作(bunch_size为1

c++ - 使用迭代器查找 vector 的中间元素 - C++

我有两个问题。第一个问题我正在阅读C++primer5thedition一书中关于C++的迭代器。在本书的一个代码示例中,给出了以下代码片段将找到vectorvi中的中间元素automid=vi.begin()+vi.size()/2;现在我想问一下,为什么在vi.size()中加入了vi.begin()?vi.size()/2是否足以找到vectorvi中的中间元素?第二个问题automid=vi.begin()+vi.size()/2;在此代码片段中,如果我像这样在vi.begin()+vi.size()周围添加括号:automid=(vi.begin()+vi.size())/2

c++ - __int128 的位操作

我尝试向__int128添加位(使用clang编译器和64位系统),但失败了。__int128x=0;//DECLARINGANDINITIALIZINGXx|=((static_cast(1))(x)打印:0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000我知道有一些短格式可以用于unsignedint或longlongint,例如(1u我需要做什么才能让它发挥作用? 最佳答案 如果

c++ - string 和 vector 的 shrink_to_fit 实现不同?

我为vector调用了shr​​ink_to_fit(),它减少了vector中元素数量的容量,但是当我为string使用shr​​ink_to_fit()时,它减少了大小但是它不是string中元素的数量。#include#include#includeusingnamespacestd;intmain(){vectorv1;v1.reserve(20);v1.push_back('a');v1.push_back('b');cout输出:vectorcapacity=20changedvectorcapacity=2stringcapacity=30changedstringcap

c++ - 多线程程序中的 std::atomic<int> memory_order_relaxed VS volatile sig_atomic_t

volatilesig_atomic_t是否提供任何内存顺序保证?例如。如果我只需要加载/存储一个整数,可以使用吗?例如这里:volatilesig_atomic_tx=0;...voidf(){std::threadt([&]{x=1;});while(x!=1){/*waiting...*/}//done!}这是正确的代码吗?在某些情况下它可能不起作用?注意:这是一个过度简化的示例,即我不是在为给定的代码片段寻找更好的解决方案。我只想了解在根据C++标准的多线程程序中,我可以从volatilesig_atomic_t中得到什么样的行为。或者,如果是这种情况,请理解行为未定义的原因。