小编seh*_*ehe的帖子

寻找没有边缘的地图的路径算法

我有2D世界地图,基本上是类似墨卡托的投影,(如果你向西走得足够长,你最终会向东开始)

我有问题:您是否可以使用A*来计算这些类型的地图上的路径?

我想不出你为什么不能这样做的原因(我认为你只是代表边缘图节点,使得北,南,东,周三,"边界"节点简单地连接到另一侧).

在此先感谢,如果有人之前见过这样的东西,或者可以给我一些提示,我会很感激.

c# c++ algorithm

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

xargs:字符串连接

zgrep -i XXX XXX | grep -o "RID=[0-9|A-Z]*" |
   uniq | cut -d "=" -f2 |
   xargs -0 -I string echo "RequestID="string
Run Code Online (Sandbox Code Playgroud)

我的输出是

RequestID=121212112
8127127128
8129129812
Run Code Online (Sandbox Code Playgroud)

但我的要求是在所有输出之前将请求ID作为前缀.任何帮助表示赞赏

grep xargs

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

计算字符串中的单词 - c编程

我需要编写一个函数来计算字符串中的单词.出于此赋值的目的,"单词"被定义为非空的非空白字符序列,通过空格与其他单词分隔.

这是我到目前为止:

int words(const char sentence[ ]);

int i, length=0, count=0, last=0;
length= strlen(sentence);

for (i=0, i<length, i++)
 if (sentence[i] != ' ')
     if (last=0)
        count++;
     else
        last=1;
 else
     last=0;

return count;
Run Code Online (Sandbox Code Playgroud)

我不确定它是否有效,因为我无法测试它直到我的整个程序完成并且我不确定它是否会起作用,是否有更好的方法来编写这个函数?

c string function

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

在Spirit中构建自定义表达式树:Qi(没有Utree或Boost :: Variant)

首先,如果使用Boost Variant或Utree更容易,那么我将与他们达成和解,我将尝试在另一个主题中解决我们的问题.但是,我非常希望能够像下面一样构建一棵树.

背景,如果你想直接讨论这个问题,请忽略:我希望能够构建一个解析像

"({a} == 0) && ({b} > 5)"
Run Code Online (Sandbox Code Playgroud)

或标准的数学表达式

"(2 * a) + b"
Run Code Online (Sandbox Code Playgroud)

然后我将在评估树之前定义a和b是什么,如下所示:

a = 10;
double val = myExpression->Evaluate();
Run Code Online (Sandbox Code Playgroud)

我的问题来自于当我尝试构建try以将字符串解析为我的表达式树时.我正在使用一个抽象类"Expression",然后导出"变量","常量"和"二进制"表达式(它也会做一元,但它不应该影响我的问题.我一直有使用我的规则添加到树的问题所以我显然做错了什么.我很难绕着属性缠头.

我的树如下(Tree.h):

class BinaryExpression;
typedef double (*func)(double, double);

class Expression
{
public:
    virtual double Evaluate() = 0;
};

class BinaryExpression : public Expression
{
private:
    Expression* lhs;
    Expression* rhs;
    func method;

    double Evaluate();

public:
    BinaryExpression(void);
    BinaryExpression(char op, Expression* lhs, Expression* rhs);
    BinaryExpression(char op);
    void operator()(Expression* lhs, Expression* rhs);
};

class ConstantExpression : public Expression
{
private: …
Run Code Online (Sandbox Code Playgroud)

c++ parsing expression-trees boost-spirit boost-spirit-qi

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

编写代码的方式非常迂腐

我想找出哪个是g ++(4.7)中最极端的错误检查标志组合.我们没有使用新的C++ 11规范,因为我们需要使用较旧的编译器交叉编译代码,而这些较旧的编译器(主要是g ++ 4.0)经常会导致g ++ 4.7忽略的问题.

现在我们使用以下标志集:

-Wall -Wcomment -Wformat -Winit-self -ansi -pedantic-errors \
-Wno-long-long -Wmissing-include-dirs -Werror -Wextra
Run Code Online (Sandbox Code Playgroud)

但是这个组合并不能识别诸如将double传递给期望int的函数或者signed和unsigned int之间的比较之类的问题,这会导致旧编译器阻塞它.

我已经阅读了文档,-Wsign-compare应该启用-Wextra但实际上似乎并非如此,所以我可能错过了一些东西......

c++ g++ error-checking

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

跟踪线程创建点以进行调试

我已经爱上了lambdas,不久之前我写了一个简单的包装器,它接受一个lambda并在一个新线程上启动它.

//
// Starts a task on a separate thread, when passed a lambda expression
//
template<typename T>
smart_ptrs::w32handle StartTask(T f)
{
    // Make a copy of the task on the heap
    T* pTask = new T(f);

    // Create a new thread to service the task
    smart_ptrs::w32handle hThread(::CreateThread(
        NULL, 
        0, 
        (LPTHREAD_START_ROUTINE)& detail::start_task_proc<T>, 
        (LPVOID) pTask, 
        NULL, 
        NULL)); 

    // If the caller ignores this rc, the thread handle will simply close and the
    // thread will continue in fire-and-forget fashion.
    return hThread; …
Run Code Online (Sandbox Code Playgroud)

c++

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

如何使用boost :: spirit解析csv

我有这个csv线

std::string s = R"(1997,Ford,E350,"ac, abs, moon","some "rusty" parts",3000.00)";
Run Code Online (Sandbox Code Playgroud)

我可以用boost::tokenizer以下方法解析它:

typedef boost::tokenizer< boost::escaped_list_separator<char> , std::string::const_iterator, std::string> Tokenizer;
boost::escaped_list_separator<char> seps('\\', ',', '\"');
Tokenizer tok(s, seps);
for (auto i : tok)
{
    std::cout << i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

它是正确的,除了令牌"生锈"应该有双引号被剥离.

这是我尝试使用boost :: spirit

boost::spirit::classic::rule<> list_csv_item = !(boost::spirit::classic::confix_p('\"', *boost::spirit::classic::c_escape_ch_p, '\"') | boost::spirit::classic::longest_d[boost::spirit::classic::real_p | boost::spirit::classic::int_p]);
std::vector<std::string> vec_item;
std::vector<std::string>  vec_list;
boost::spirit::classic::rule<> list_csv = boost::spirit::classic::list_p(list_csv_item[boost::spirit::classic::push_back_a(vec_item)],',')[boost::spirit::classic::push_back_a(vec_list)];
boost::spirit::classic::parse_info<> result = parse(s.c_str(), list_csv);
if (result.hit)
{
  for (auto i : vec_item)
  {
    cout << i << endl;
   } …
Run Code Online (Sandbox Code Playgroud)

c++ csv boost boost-spirit boost-spirit-qi

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

提升融合类型偏移量

我目前正在尝试计算一个增强融合适应结构中数据成员的偏移量,但我不确定是否有一种优雅的方法可以做到这一点.我想做类似以下的事情:

#include <iostream> 
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/fusion/sequence/intrinsic/at.hpp>
#include <boost/fusion/include/at.hpp>
#include <cstddef.h>

   struct test {
      int a;  
      char c;  
      double b;  
    };

BOOST_FUSION_ADAPT_STRUCT(
  test, 
  (int, a)
  (char, c)
  (double, b)
)

int main() {
test s{1, 2, 3.0}; 
// The following code doesn't work... I'm just trying to get my point across
std::cout << "offset is :" << offsetof(test, at<1>(s)) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

关键是我不想在offsetof函数中明确声明'a'或'b'或'c'.这本身并没有那么有用,但是我想在boost for_each循环中使用它,这样我就可以在编译时计算任何结构的所有数据成员的偏移量.

如果您有任何想法,我很乐意听到他们!

c++ boost offsetof boost-fusion

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

C++中具有虚拟继承的类大小

#include<iostream>

using namespace std;

class abc
{
    int a;
};
class xyz : public virtual abc
{
    int b;
};

int main()
{
    abc obj;
    xyz obj1;
    cout<<endl<<sizeof(obj);
    cout<<endl<<sizeof(obj1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

答案将取决于编译器,但当我看到这个结果时,我感到很惊讶

~/Documents/workspace/tmp ‹.rvm-›  $ ./class_sizes   

4
16
Run Code Online (Sandbox Code Playgroud)

如果我删除虚拟关键字,那么分配的大小分别为4和8,这正是我的预期.

为什么额外的空间被准确占用?我怀疑它是针对vptr表或其他类似但不确定的.

c++ virtual-inheritance

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

算术表达式上下文中的宏扩展?

我在网站上看到了以下代码.我无法理解结果是如何形成的11,而不是2513.

为什么我在想,25因为SQ(5) 5*5

或者13因为

SQ(2) = 4;

SQ(3) = 9;

可能是最终的结果将是13 (9 + 4) 惊讶地看到结果为11.结果如何11

using namespace std;
#define SQ(a) (a*a)
int main()
{
    int ans = SQ(2 + 3);
    cout << ans << endl;
system("pause");
}
Run Code Online (Sandbox Code Playgroud)

c c++

6
推荐指数
2
解决办法
713
查看次数