我正在尝试过滤矢量,因此它只包含一个特定的值.
例如,确保向量仅包含值"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)
我有一种感觉,我可能正在接近这个错误所以任何建议将不胜感激!
谢谢
将动态大小的数组传递给另一个函数的最"正确"的方法是什么?
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)
谢谢
我正在尝试设置几个线程以处于等待状态,直到它们收到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_t,can_work和jobs_done是pthread_cond_t,jobs_completed是一个,bool而jobs_complete是一个int。 …
我似乎不能送vector的struct,我通过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的好文档. …
我试图找到一种方法让玩家发射他们的武器并且只打一定比例.例如,一支枪只能达到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)
它不似乎是球员们打了正确的百分比,但我真的不知道为什么.
任何想法或建议?这些明显错误吗?
谢谢
我一直在研究 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。这可能会出现问题吗?
谢谢!
如果您访问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)
这是我目前正在使用的代码,它可以正常工作,但是当它转移到下一页时可能会丢失一个按键/键盘.
有谁知道谷歌如何做或有任何建议?
谢谢