小编fee*_*ree的帖子

为什么运算符重载失败?

在下面的代码中,我举例说明了运算符重载:

#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)

c++

2
推荐指数
1
解决办法
614
查看次数

如何使用STL获得中位数指数?

之前已经讨论过如何计算数字数组的中值.例如,您可以参考使用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++ stl

2
推荐指数
1
解决办法
5739
查看次数

如果我只需要几个函数,是否值得包含一个大型C++库?

我有一个与C++静态库和动态库相关的问题.假设您现在正在开发一个程序,并且可以在C++库中找到一个功能.那么你有两个选择:一个是编写一些代码(假设不是太多)并重新实现该功能; 另一种是从C++库调用该函数.但是,您要使用的C++库是一个非常大的库,而您只使用库的一小部分.在这种情况下,什么是更好的选择?谢谢!

c++ dll shared-libraries

2
推荐指数
1
解决办法
152
查看次数

在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)

c++

2
推荐指数
1
解决办法
2462
查看次数

隐马尔可夫模型工具箱/库

我现在正在尝试为我的项目使用隐马尔可夫模型,我搜索了互联网,并在MATLAB或C/C++中发现了许多隐藏的马尔可夫模型实现.事实上,Matlab提供了一个统计工具箱,其中包括隐马尔可夫模型的实现.我是这个领域的新手,我想知道哪个工具箱或库是最好的.购买隐藏马尔可夫模型的统计工具箱是明智的吗?此外,我计划在图像处理的背景下使用这个模型.谢谢!

matlab signal-processing image-processing hidden-markov-models

2
推荐指数
1
解决办法
2508
查看次数

命令cmake_policy [cmake]的含义?

我现在正在阅读一个cmake脚本,我对以下代码感到困惑:

if(COMMAND cmake_policy)
  cmake_policy(SET CMP0003 NEW)
endif()
Run Code Online (Sandbox Code Playgroud)

我理解CMPOOO3的含义,因为这里有一部好的纪录片.但是,我无法理解第一行if(COMMAND cmake_policy),这是什么意思?谢谢.

cmake

2
推荐指数
1
解决办法
1951
查看次数

数组或图像中的唯一值数字

我现在正在从磁盘读取图像.图像可以是灰度图像或二值图像.但是,我无法从图像的头文件中分辨出来.我现在要做的是告诉唯一像素的数量.如果唯一像素数大于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)

如果候选图像是灰度图像,则该功能可以很好地完成.但是,如果候选图像是二进制的,则该功能是耗时的.关于改进功能的任何想法?

c++ stl image-processing

2
推荐指数
1
解决办法
147
查看次数

在Windows中使用cmake和make

据我所知,在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中的几个命令进行发布.非常感谢.

cmake visual-studio-2010

2
推荐指数
1
解决办法
5055
查看次数

如何为 boost::serialization 指定 nvp 包装器?

我正在尝试学习如何使用 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)

c++ boost boost-serialization

2
推荐指数
1
解决办法
628
查看次数

参考对象变量的c ++拷贝赋值运算符

我给出以下示例来说明我的问题:

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)

这里我不知道如何定义复制赋值运算符.你有什么想法?谢谢.

c++

2
推荐指数
1
解决办法
276
查看次数