在下面的代码中,我举例说明了运算符重载:
#include <iostream>
using namespace std;
template <typename T>
class A
{
public:
A() {};
A( T &obj) {value = obj;};
~A() {};
T value;
template <typename E>
A<T>& operator = (const A<E> &obj)
{
cout<<"equal operator"<<endl;
if(this == &obj)
return *this;
value = obj.value;
return *this;
}
};
int main()
{
int temp;
temp = 3;
A<int> myobjects(temp);
cout<<myobjects.value<<endl;
temp = 7;
A<int> yourobjects(temp);
yourobjects = myobjects;
cout<<yourobjects.value<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我调试这个程序时,我发现主程序没有调用相等的运算符重载函数.但是,如果我按以下方式更改等于运算符:
A<T>& operator = (const A<T> &obj)
{ …Run Code Online (Sandbox Code Playgroud) 之前已经讨论过如何计算数字数组的中值.例如,您可以参考使用STL容器进行中值计算时的正确方法是什么?.现在我有一个不同的问题,那就是如何获得原始STL容器中的中位数索引.为了说明我的问题,我举一个例子:
vector<int> myarray;
myarray.push_back(3);
myarray.push_back(1);
myarray.push_back(100);
myarray.push_back( 20);
myarray.push_back(200);
int n = myarray.size()/2;
nth_element(myarray.begin(), myarray.begin()+n, myarray.end());
int median = myarray[n];
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我可以得到中值,但我无法在原始向量数组中得到它的索引(4).有任何想法吗?谢谢!
我有一个与C++静态库和动态库相关的问题.假设您现在正在开发一个程序,并且可以在C++库中找到一个功能.那么你有两个选择:一个是编写一些代码(假设不是太多)并重新实现该功能; 另一种是从C++库调用该函数.但是,您要使用的C++库是一个非常大的库,而您只使用库的一小部分.在这种情况下,什么是更好的选择?谢谢!
我在C++中有一个关于friend函数的问题.我理解,如果函数被定义为类的友元函数,它可以访问任何成员变量或函数,无论它是私有的,受保护的还是公共的.最近我使用doxygen来创建文档引用,我发现了友元函数的另一个优点:它与类的关系可以很容易地说明,因为友元函数将在HTML页面中的成员函数之后列出.但是,如果函数未定义为friend,则将其视为全局函数,并且使用doxygen时,它将不会与类文档一起列出.然后我计划将与特定类关系的所有全局函数作为其友元函数.我想知道这是否是一个好习惯.
以下代码显示可以选择一个函数作为友元函数或全局函数.
#include <iostream>
#include <map>
#include <set>
#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
#include <numeric>
#include <string>
using namespace std;
class ABCD
{
public:
int a;
int b;
friend void friend_fun(const ABCD &obj);
};
void fun(const ABCD &obj)
{
std::cout<<obj.a<<endl;
std::cout<<obj.b<<endl;
};
void friend_fun(const ABCD &obj)
{
std::cout<<obj.a<<endl;
std::cout<<obj.b<<endl;
};
int main ()
{
ABCD obj;
obj.a = 20;
obj.b = 30;
fun(obj);
friend_fun(obj);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我现在正在尝试为我的项目使用隐马尔可夫模型,我搜索了互联网,并在MATLAB或C/C++中发现了许多隐藏的马尔可夫模型实现.事实上,Matlab提供了一个统计工具箱,其中包括隐马尔可夫模型的实现.我是这个领域的新手,我想知道哪个工具箱或库是最好的.购买隐藏马尔可夫模型的统计工具箱是明智的吗?此外,我计划在图像处理的背景下使用这个模型.谢谢!
matlab signal-processing image-processing hidden-markov-models
我现在正在阅读一个cmake脚本,我对以下代码感到困惑:
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
endif()
Run Code Online (Sandbox Code Playgroud)
我理解CMPOOO3的含义,因为这里有一部好的纪录片.但是,我无法理解第一行if(COMMAND cmake_policy),这是什么意思?谢谢.
我现在正在从磁盘读取图像.图像可以是灰度图像或二值图像.但是,我无法从图像的头文件中分辨出来.我现在要做的是告诉唯一像素的数量.如果唯一像素数大于2,则图像为灰度; 否则它是黑白图像.我正在使用以下功能来完成这项工作:
bool is_binary_image( std::vector<unsigned char> &memory)
{
std::set<unsigned char> myset;
for( std::vector<unsigned char>::iterator it = memory.begin();
it!= memory.end();
it++)
{
myset.insert(*it);
if (myset.size()>2)
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
如果候选图像是灰度图像,则该功能可以很好地完成.但是,如果候选图像是二进制的,则该功能是耗时的.关于改进功能的任何想法?
据我所知,在linux cmake中,make和make install可以组合在一起产生一个版本.例如:
cmake -DCMAKE_BUILD_TYPE=Release ..
make
make install
Run Code Online (Sandbox Code Playgroud)
但是,在Windows中,我找不到可以执行相同工作的类似命令.通常,如果使用Visual Studio,则首先构建.sln项目,然后编译.sln项目,最后运行INSTALL项目.是否可以使用Linux中的几个命令进行发布.非常感谢.
我正在尝试学习如何使用 boost::serialization 来记录对象。例如,我使用以下代码来序列化一个对象:
struct Abc
{
int a;
float b;
double c;
};
namespace boost
{
namespace serialization
{
template <typename Archive>
void serialize(Archive& ar, Abc &obj,const unsigned int version)
{
ar & BOOST_SERIALIZATION_NVP(obj.a);
ar & BOOST_SERIALIZATION_NVP(obj.b);
ar & BOOST_SERIALIZATION_NVP(obj.c);
};
}
};
Abc kkk;
std::ofstream ofs(tmpFile);
boost::archive::xml_oarchive ar(ofs);
ar & kkk;
ofs.close();
Run Code Online (Sandbox Code Playgroud)
但是,当我编译代码时,出现以下编译错误:
Error 1 error C2664: 'boost::mpl::assertion_failed' : cannot convert parameter 1 from 'boost::mpl::failed ************boost::serialization::is_wrapper<T>::* ***********' to 'boost::mpl::assert<false>::type' \boost_1_50_0\boost\archive\basic_xml_oarchive.hpp 92
Run Code Online (Sandbox Code Playgroud)
错误信息引出boost的源码:
template<class T>
void save_override(T & t, BOOST_PFTO …Run Code Online (Sandbox Code Playgroud) 我给出以下示例来说明我的问题:
class Abc
{
public:
int a;
int b;
int c;
};
class Def
{
public:
const Abc& abc_;
Def(const Abc& abc):abc_(abc) { }
Def& operator = (const Def& obj)
{
// this->abc_(obj.abc_);
// this->abc_ = obj.abc_;
}
};
Run Code Online (Sandbox Code Playgroud)
这里我不知道如何定义复制赋值运算符.你有什么想法?谢谢.