小编nok*_*oko的帖子

你能将附加参数传递给谓词吗?

我正在尝试过滤矢量,因此它只包含一个特定的值.

例如,确保向量仅包含值"abc"的元素.

现在,我正在努力实现这一目标remove_copy_if.

有没有办法在使用std算法之一时将附加参数传递给谓词?

std::vector<std::string> first, second;
first.push_back("abc");
first.push_back("abc");
first.push_back("def");
first.push_back("abd");
first.push_back("cde");
first.push_back("def");

std::remove_copy_if(first.begin(), first.end(), second.begin(), is_invalid);
Run Code Online (Sandbox Code Playgroud)

我希望将以下函数作为谓词传递,但似乎更有可能最终将比较正在检查的当前值remove_copy_if和下一个.

bool is_invalid(const std::string &str, const std::string &wanted)
{
   return str.compare(wanted) != 0;
}
Run Code Online (Sandbox Code Playgroud)

我有一种感觉,我可能正在接近这个错误所以任何建议将不胜感激!

谢谢

c++ predicate

15
推荐指数
2
解决办法
8406
查看次数

将动态数组传递给其他函数的正确方法

将动态大小的数组传递给另一个函数的最"正确"的方法是什么?

bool *used = new bool[length]();
Run Code Online (Sandbox Code Playgroud)

我想出了一些编译的方法,但我不太确定正确的方法是什么.

例如

这些会超过价值吗?

static void test(bool arr[])

static void test(bool *arr)
Run Code Online (Sandbox Code Playgroud)

这个会通过引用传递吗?

static void test(bool *&arr)
Run Code Online (Sandbox Code Playgroud)

谢谢

c++ arrays dynamic

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

pthread 广播然后等待?

我正在尝试设置几个线程以处于等待状态,直到它们收到pthread_cond_broadcast().

完成工作后,我希望线程回到等待状态。

我还希望调用 的进程pthread_cond_broadcast()在继续之前等待所有线程返回到它们的等待状态。在这种情况下,调用广播的是 main() 函数。我正在尝试使用 main(0pthread_cond_wait()在调用广播后执行 a 来执行此操作。

void* Work::job(void* id)
{
    int idx = (long)id;

    while(1)
    {
        pthread_mutex_lock(&job_lock);

        while(!jobs_complete)
        {
            // wait for main to broadcast
            pthread_cond_wait(&can_work, &job_lock);
            pthread_mutex_unlock(&job_lock);

            // work here

            pthread_mutex_lock(&job_lock);
            ++jobs_completed;

            if(jobs_completed == NUM_THREADS)
            {
                jobs_complete = true;
                pthread_cond_signal(&jobs_done);
                pthread_mutex_unlock(&job_lock);
            }
            pthread_mutex_unlock(&job_lock);
        }

        pthread_mutex_unlock(&job_lock);
    }

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

NUM_THREADS是 4,job_lock是一个pthread_mutex_tcan_workjobs_donepthread_cond_tjobs_completed是一个,booljobs_complete是一个int。 …

c++ mutex pthreads race-condition

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

使用msgpack通过zeromq发送矢量

我似乎不能送vectorstruct,我通过ZeroMQ序列与msgpack.

它是这个结构的向量:

struct MyData
{
    MyData() : id(0), x(0), y(0), a(0) {}
    MyData(const Obj &r) : id(0), x(r.pose[0]), y(r.pose[1]), a(r.pose[2]) {}
    MyData(const Obj *r) : id(0), x(r->pose[0]), y(r->pose[1]), a(r->pose[2]) {}
    double id;
    double x;
    double y;
    double a;
    MSGPACK_DEFINE(id, x, y, a);
};
Run Code Online (Sandbox Code Playgroud)

在发送方:

data 是一个 std::vector<MyData>

msgpack::sbuffer sbuf;
msgpack::pack(sbuf, data);
zmq::message_t msg(sbuf.data(), sizeof(char *) * sbuf.size(), NULL, NULL);
local_socket->send(msg); // this is just zeromq's send function
Run Code Online (Sandbox Code Playgroud)

难道我构建我sbuffer还是message_t错了吗?

在接收方:

我不确定我是否应该投射,msg.data()但我找不到任何关于如何使用ZeroMQ和messagepack的好文档. …

c++ zeromq messagepack msgpack

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

PHP游戏武器准确性

我试图找到一种方法让玩家发射他们的武器并且只打一定比例.例如,一支枪只能达到70%的时间,而另一支枪只能达到34%的时间.

到目前为止,我能想出的只有加权数组.

尝试1:

private function weighted_random(&$weight)
    {
        $weights = array(($weight/100), (100-$weight)/100);
        $r = mt_rand(1,1000);
        $offset = 0;
        foreach($weights as $k => $w)
        {
            $offset += $w*1000;
            if($r <= $offset)
                return $k;
        }
    }
Run Code Online (Sandbox Code Playgroud)

尝试2:

private function weapon_fired(&$weight)
    {
        $hit = array();
        for($i = 0; $i < $weight; $i++)
            $hit[] = true;
        for($i = $weight; $i < 100; $i++)
            $hit[] = false;
        shuffle($hit);
        return $hit[mt_rand(0,100)];
    }
Run Code Online (Sandbox Code Playgroud)

它不似乎是球员们打了正确的百分比,但我真的不知道为什么.

任何想法或建议?这些明显错误吗?

谢谢

php random weighted

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

future 是检查单个线程完成情况的安全方法吗?

我一直在研究 Boost 的 future,想知道它们是否是检查单个线程是否已完成的可接受且安全的方法。

我以前从未使用过它们,所以我编写的大部分代码都是基于Boost 的同步文档

#include <iostream>
#include <boost/thread.hpp>
#include <boost/thread/future.hpp>

int calculate_the_answer_to_life_the_universe_and_everything()
{
    boost::this_thread::sleep(boost::posix_time::seconds(10));
    return 42;
}

int main()
{
    boost::packaged_task<int> task(calculate_the_answer_to_life_the_universe_and_everything);
    boost::unique_future<int> f(task.get_future());

    boost::thread th(boost::move(task));

    while(!f.is_ready())
    {
        std::cout << "waiting!" << std::endl;
        boost::this_thread::sleep(boost::posix_time::seconds(1));
    }

    std::cout << f.get() << std::endl;

    th.join();
}
Run Code Online (Sandbox Code Playgroud)

这似乎在等待calculate_the_answer_to_life_the_universe_and_everything()线程返回42。这可能会出现问题吗?

谢谢!

c++ multithreading boost thread-safety

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

Google如何在页面转换时捕获按键?

如果您访问Google.com并在搜索栏中输入一个字母,它似乎会立即将您转移到另一个页面.您可以在此期间尽快输入内容,Google不会丢失任何一个字符.

我已经尝试使用keyup()事件和setinterval()来模拟它,但是在加载页面时我仍然会丢失一两个字符.

$(document).ready(function(){
var timer;$("input#q").keyup(
  function(e){
  var str = $("input#q").val();
  if(str.length > 1){
    clearInterval(timer);timer = setTimeout(
      function(){var url = "/search/?q="+encodeURI($("input#q").val());
      location.href = url;}, 210);
   }
});
Run Code Online (Sandbox Code Playgroud)

这是我目前正在使用的代码,它可以正常工作,但是当它转移到下一页时可能会丢失一个按键/键盘.

有谁知道谷歌如何做或有任何建议?

谢谢

jquery

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