小编Ste*_*ing的帖子

是否有可能在c ++中开发静态for循环?

是否有可能存在这样的事情?

template<int Channel>
void deduce_mask(Matrix const &src, int mask[])
{
    //I hope i could become a constant and the compiler would unroll the loop at compile time        
    for(int i = Channel; i != -1; --i)
    {            
        //mapper is a helper class which translate two and three dimension into one dimension index
        //constexpr makes it possible to find out the index at compile time
        mask[mapper(0, 1, i)] = src(row - 1, col)[i];
        mask[mapper(1, 1, i)] = src(row, col)[i];
        mask[mapper(2, 1, i)] …
Run Code Online (Sandbox Code Playgroud)

c++ for-loop template-meta-programming

18
推荐指数
3
解决办法
5452
查看次数

通过openCV创建矩形蒙版的更好方法

在openCV中创建一个掩码

      /** result I want
          0 0 0 0 0 0 0 0
          0 0 0 0 0 0 0 0
          0 0 1 1 1 1 0 0
          0 0 1 1 1 1 0 0
          0 0 1 1 1 1 0 0
          0 0 1 1 1 1 0 0
          0 0 0 0 0 0 0 0
          0 0 0 0 0 0 0 0
      */    
cv::Mat mask = cv::Mat::zeros(8, 8, CV_8U);
std::cout<<"before : \n"<<mask<<std::endl;
for(int …
Run Code Online (Sandbox Code Playgroud)

c++ opencv

18
推荐指数
2
解决办法
2万
查看次数

strand asio中有什么优势?

据我所知,学习提升asio并找出一个叫做"strand"的课程.如果只有一个io_service与特定链相关联并通过strand发布句柄.

例子(从这里)

boost::shared_ptr< boost::asio::io_service > io_service( 
    new boost::asio::io_service
);
boost::shared_ptr< boost::asio::io_service::work > work(
    new boost::asio::io_service::work( *io_service )
);
boost::asio::io_service::strand strand( *io_service );

boost::thread_group worker_threads;
for( int x = 0; x < 2; ++x )
{
    worker_threads.create_thread( boost::bind( &WorkerThread, io_service ) );
}

boost::this_thread::sleep( boost::posix_time::milliseconds( 1000 ) );

strand.post( boost::bind( &PrintNum, 1 ) );
strand.post( boost::bind( &PrintNum, 2 ) );
strand.post( boost::bind( &PrintNum, 3 ) );
strand.post( boost::bind( &PrintNum, 4 ) );
strand.post( boost::bind( &PrintNum, 5 ) );
Run Code Online (Sandbox Code Playgroud)

然后,strand会为我们序列化处理程序执行.但是这样做的好处是什么呢?为什么我们不想创建一个单独的线程(例如:for循环中的make …

c++ boost boost-asio

18
推荐指数
2
解决办法
8139
查看次数

我应该返回一个右值引用(通过std :: move'ing)吗?

一篇C++ Next博客文章

A compute(…)
{
    A v;
    …
    return v;
}
Run Code Online (Sandbox Code Playgroud)

如果A具有可访问的副本或移动构造函数,则编译器可以选择忽略该副本.否则,如果A有移动构造函数,v则移动.否则,如果A有复制构造函数,v则复制.否则,将发出编译时错误.

我以为我应该总是返回值,std::move 因为编译器能够找出用户的最佳选择.但另一个例子来自博客文章

Matrix operator+(Matrix&& temp, Matrix&& y)
  { temp += y; return std::move(temp); }
Run Code Online (Sandbox Code Playgroud)

std::move是必要的,因为y必须将其视为函数内的左值.

啊,在研究这篇博文之后,我的脑袋几乎爆炸了.我尽力去理解推理,但是我学的越多,我就越困惑.我们为什么要借助于这个价值来回报这个价值std::move

c++ return rvalue-reference stdmove

17
推荐指数
3
解决办法
9073
查看次数

仪器一直告诉我,我有内存泄漏

我是mac和仪器的新手,我用它测试我的Qt应用程序,我发现了很多泄漏的对象,几乎所有这些都来自Qt lib.I检查我的代码非常小心但是找不到问题.为了避免内存泄漏的问题,我严格遵守RAII的规则,总是让类处理资源,确保每个小部件都有父级,那些没有父级(意图)的小部件将通过智能指针或Qt :: WA_DeleteOnClose保护.

为了修复内存泄漏警告,我编写了一个非常简单的Qt应用程序并将其用作测试,仪器总是显示我有一些内存泄漏(如图)甚至是我创建的最简单的Qt应用程序.

    #include <QApplication>
    #include <QLabel>

        int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);


        QLabel w;
        w.resize(320, 240);
        w.show();

        return a.exec();
    }
Run Code Online (Sandbox Code Playgroud)

仪器图

呼叫树

泄漏的物体

我稍微修改了一下代码,看看Instruments出现的内存泄漏是否会持续上升.

#include <QApplication>
    #include <QLabel>

        int main(int argc, char *argv[])
       {
        QApplication a(argc, argv);


        for(size_t i = 0; i != 100; ++i){
        QLabel w;
        w.resize(320, 240);
        w.show();
       }
       QLabel w;
       w.resize(320, 240);
       w.show();

        return a.exec();
    }
Run Code Online (Sandbox Code Playgroud)

呼叫树 泄漏的物体

内存泄漏确实增加,我强烈希望这是仪器的错误,否则我必须回到Qt4(我不知道它会有同样的问题或者没有).我不认为这很简单应用程序可以通过mac app store(OSX)的质量检查.发生了什么?我该怎么解释这个现象?如果没有内存泄漏,我不应该看到泄漏对象的任何消息,我是否正确?Qt5.0.2的错误?

c++ qt memory-leaks

15
推荐指数
1
解决办法
1106
查看次数

通过opencv检测停车场

如果对象是单行(较小的图像),则该程序识别对象.

from __future__ import division 
from collections import defaultdict
from collections import OrderedDict
from cv2 import line
import cv2
from matplotlib import pyplot as plt
from networkx.algorithms import swap
from numpy import mat
from skimage.exposure import exposure
import numpy as np
from org import imutils
from numpy.core.defchararray import rindex
import sys

def line(p1, p2):
    A = (p1[1] - p2[1])
    B = (p2[0] - p1[0])
    C = (p1[0]*p2[1] - p2[0]*p1[1])
    return A, B, -C

def intersection(L1, L2):
    D  = L1[0] * …
Run Code Online (Sandbox Code Playgroud)

opencv python-2.7 opencv3.0

11
推荐指数
1
解决办法
5895
查看次数

这个指针和性能损失

void do_something() {....}

struct dummy
{
   //even I dont call this, compiler will call it fall me, they need it
   void call_do_something() { this->do_something_member(); } 
   void do_something() {....}
};
Run Code Online (Sandbox Code Playgroud)

据我所知,当你想要访问数据成员或类的成员函数时,C++中的每个类或结构都会隐含地调用这个指针,这会给C++带来性能损失吗?

我的意思是

int main()
{
  do_something(); //don't need this pointer
  dummy().call_do_something(); //assume the inline is prefect

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

call_do_something需要一个this指针来调用成员函数,但是像do_something这样的C不需要这个指针,这个指针在与C like函数比较时会带来一些性能损失吗?

我没有任何意义可以做任何微优化,因为它会给我带来这么多时间,但总是不会给我带来好结果,我总是遵循"衡量,不思考"的规则.我想知道这个指针会因为好奇而带来性能损失.

c++

10
推荐指数
1
解决办法
1131
查看次数

通过顺序容器展平PyTorch构建层

我试图通过PyTorch的顺序容器构建一个cnn,我的问题是我无法弄清楚如何展平图层.

main = nn.Sequential()
self._conv_block(main, 'conv_0', 3, 6, 5)
main.add_module('max_pool_0_2_2', nn.MaxPool2d(2,2))
self._conv_block(main, 'conv_1', 6, 16, 3)
main.add_module('max_pool_1_2_2', nn.MaxPool2d(2,2)) 
main.add_module('flatten', make_it_flatten)
Run Code Online (Sandbox Code Playgroud)

我应该在"make_it_flatten"中加入什么?我试图压扁主但是它不起作用,主要不存在调用视图的东西

main = main.view(-1, 16*3*3)
Run Code Online (Sandbox Code Playgroud)

python conv-neural-network pytorch

8
推荐指数
1
解决办法
5014
查看次数

极慢的双线性插值(与 OpenCV 相比)

template<typename T>\ncv::Mat_<T> const bilinear_interpolation(cv::Mat_<T> const &src, cv::Size dsize,\n                                     float dx, float dy)\n{\n    cv::Mat_<T> dst = dsize.area() == 0 ? cv::Mat_<T>(src.rows * dy, src.cols * dx) :\n                                        cv::Mat_<T>(dsize);\n  \n    float const x_ratio = static_cast<float>((src.cols - 1)) / dst.cols;\n    float const y_ratio = static_cast<float>((src.rows - 1)) / dst.rows;\n    for(int row = 0; row != dst.rows; ++row)\n    {\n        int y = static_cast<int>(row * y_ratio);\n        float const y_diff = (row * y_ratio) - y; //distance of the nearest pixel(y axis)\n        float const y_diff_2 = …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm opencv image

6
推荐指数
1
解决办法
4658
查看次数

获取c ++ 11(原子)的发布操作

#include <atomic>
#include <iostream>
#include <thread>

class atomicAcquireRelease00
{
public:
    atomicAcquireRelease00() : x(false), y(false), z(0) {}
    void run()
    {
        std::thread a(&atomicAcquireRelease00::write_x, this);
        std::thread b(&atomicAcquireRelease00::write_y, this);
        std::thread c(&atomicAcquireRelease00::read_x_then_y, this);
        std::thread d(&atomicAcquireRelease00::read_y_then_x, this);

        a.join();
        b.join();
        c.join();
        d.join();

        std::cout<<"z == "<<z.load()<<std::endl;
    }

private:
    void write_x()
    {                
        x.store(true, std::memory_order_release); //(1)
    }

    void write_y()
    {           
        y.store(true, std::memory_order_release); //(2)
    }

    void read_x_then_y()
    {            
        while(!x.load(std::memory_order_acquire)); //(3)
        if(y.load(std::memory_order_acquire)){    //(4)
            ++z;
        }
    }

    void read_y_then_x()
    {           
        while(!y.load(std::memory_order_acquire));  //(5)
        if(x.load(std::memory_order_acquire)){      //(6)
            ++z;
        }

    }

private:
    std::atomic<bool> x, y;
    std::atomic<int> z; …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading c++11

5
推荐指数
1
解决办法
639
查看次数