小编Rub*_*ens的帖子

在lambda演算中定义堆栈数据结构及其主要操作

我正在尝试stack使用定点组合器在lambda演算中定义数据结构.我试图定义两个操作,insertion以及removal元素,所以,pushpop,但是我能够定义的唯一一个,插入,不能正常工作.删除我无法弄清楚如何定义.

这是我对push操作的方法,我的定义是stack:

Stack definition:
STACK = \y.\x.(x y)
PUSH = \s.\e.(s e)
Run Code Online (Sandbox Code Playgroud)

我的堆栈初始化为一个元素来指示底部; 我在0这里使用:

stack = STACK 0 = \y.\x.(x y) 0 = \x.(x 0)       // Initialization
stack = PUSH stack 1 = \s.\e.(s e) stack 1 =     // Insertion
    = \e.(stack e) 1 = stack 1 = \x.(x 0) 1 =
    = (1 0)
Run Code Online (Sandbox Code Playgroud)

但是现在,当我尝试插入另一个元素时,它不起作用,因为我的初始结构已被解构.

如何修复STACK定义或PUSH定义,以及如何定义POP操作?我想我将不得不应用组合器,以允许递归,但我无法弄清楚如何做到这一点.

参考: …

lambda functional-programming combinators lambda-calculus y-combinator

8
推荐指数
2
解决办法
1758
查看次数

检查std :: vector中是否存在给定索引

我需要索引访问我的std::vector,因此我必须检查索引是否已经可用于首先删除它们,然后设置一个新值.

这是我的setter函数:

void SetVector(int position, int value) {
    std::vector<int>iterator it = testVector.begin();
    // need a check here
    testVector.insert(it-testVector.begin()+position, value);
}
Run Code Online (Sandbox Code Playgroud)

或者这是我的需求错误的C++集合?(应该动态增长,所以std:array不可能).可以使用std::map但也许它也可能std::vector.

c++ iterator vector std

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

客户端/服务器通信中的中间件

我正在用C++构建一个客户端/服务器对,我用它winsock来进行通信.但是,我无法在C++中找到任何可以实现某些内容的库,而不是直接从客户端向服务器发送请求,而是存储请求,稍后将与服务器进行通信.

有没有任何方法或库可以将请求发送到像经纪人这样的东西,反之亦然?将存储请求的东西,然后将与服务器通信.这些是我已经使用的库:

#pragma comment( linker, "/defaultlib:ws2_32.lib")
#include <WinSock2.h>
#include <winsock.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <windows.h>
#include <ws2tcpip.h>
#include <fstream>
using namespace std;

#define HOSTNAME_LENGTH 20
#define RESP_LENGTH 40
#define FILENAME_LENGTH 20
#define REQUEST_PORT 5001
#define BUFFER_LENGTH 1024 
#define TRACE 0
#define MSGHDRSIZE 8 //Message Header Size
Run Code Online (Sandbox Code Playgroud)

client-server winsock visual-c++ broker

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

找到给定排列的索引

我正在0, 1, ..., (N - 1)按顺序逐个阅读这些数字.我的目标是只使用O(1)空格来找到这个给定排列的词典编纂索引.

之前曾问过这个问题,但我能找到的所有算法都使用了O(N)空间.我开始认为这是不可能的.但是,通过减少分配数量,这对我帮助很大.

algorithm space permutation combinatorics

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

Dijkstra的算法:内存消耗

我根据本网站上的代码实现了Dijkstra的算法.基本上,我有许多节点(比如10000),每个节点可以有1到3个连接到其他节点.

节点在3d空间内随机生成.连接也是随机生成的,但它总是首先尝试找到与其最近邻居的连接,然后慢慢增加搜索半径.每个连接的距离为1.(我怀疑这一点很重要,但这只是背景).

在这种情况下,该算法仅用于查找从起始点到所有其他节点的最短跳数.它适用于10,000个节点.我遇到的问题是,随着节点数量的增加,比如200万,我在尝试构建图形时会耗尽所有计算机内存.

有没有人知道实现算法以减少内存占用的另一种方法,还是有另一种算法使用更少的内存?

c++ memory algorithm memory-management dijkstra

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

使用边距/填充自动放置图例框

我正试图在一个情节中自动放置一个传奇盒子,但我仍然遇到麻烦.我想将图例框放在靠近图的角落,但是有一个小的填充/边距.

使用预定义的位置,比如"topright""bottomleft",将图例放置得太近/在图的边界上,就像这里一样; 我发现它令人惊讶的不安保持对像素试图像素达到一个很好的位置,以框,如图所示这里.

我想知道是否有根据绘图本身的宽度定位图例框,而不是max/min值.可以自动将图例定位在p%靠近定义的角落的东西.无论如何在R中这样做?或者甚至可以在预定位置添加一些填充?

plot r legend

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

在命令中使用引号和双引号设置别名

我想为命令设置别名:

expect -c 'spawn ssh usr@ip -p 57022 ; expect password ; send "pass\n" ; interact'
Run Code Online (Sandbox Code Playgroud)

但来自alias alias_name=""和来自命令的引用并不喜欢彼此.

我试图与组合',"和',但所有这些失败.我怎样才能做到这一点?

linux bash shell alias

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

如果Maven release:prepare失败,如何从失败点继续?

任何人都可以建议如何继续 maven 发布:从失败的那一点开始准备?

我尝试使用 resume 命令,但它不会从失败点继续。

maven-2 maven-release-plugin

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

用最少的动作打开一个锁

考虑一个由车轮系统制成的锁.每个轮子按顺序有26个字母,每个轮子都用'a'.如果向上移动一个轮子,该轮子的显示将移动到字母表的下一个字母; 另一方面,向下移动一个轮,将显示切换到字母表的前一个字母.例如:

['a'] ->  UP  -> ['b']
['b'] -> DOWN -> ['a']
...
['z'] ->  UP  -> ['a']
['a'] -> DOWN -> ['z']
Run Code Online (Sandbox Code Playgroud)

只需轻弹就可以将同一方向的轮子的任何连续子序列移动.这与以单一运动方式移动子序列的所有轮子具有相同的效果.例如,如果目标串是'zzzzzzzzz',单一的运动,改变'a''z',将车轮的整个序列改变从'a''z',从而到达目标串-打开锁.

如何确定打开锁的最小移动次数?这个问题有动态解决方案吗?该算法必须产生以下结果:

           Target string         | # moves
   ______________________________ __________
1 | abcxyz                       |    5
2 | abcdefghijklmnopqrstuvwxyz   |   25
3 | aaaaaaaaa                    |    0
4 | zzzzzzzzz                    |    1
5 | zzzzbzzzz                    |    3
Run Code Online (Sandbox Code Playgroud)

案例1,目标abcxyz:

aaa[aaa] -> DOWN -> aaazzz
aaa[zz]z -> DOWN …
Run Code Online (Sandbox Code Playgroud)

algorithm dynamic-programming

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

使用std :: cin忽略/跳过令牌

scanf一个被允许跳过匹配令牌,简单地添加*到图案,如下所示:

int first, second;
scanf("%d %*s %d", &first, &second);
Run Code Online (Sandbox Code Playgroud)

有没有相同的方法std::cin?像(当然,节省额外变量的使用):

int first, second;
std::cin >> first >> `std::skip` >> second;
Run Code Online (Sandbox Code Playgroud)

c++ skip scanf cin

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