小编Ale*_*lex的帖子

在合并排序C++中使用合并时的随机值

对于一个小的家庭作业,我应该编写一个简单的合并函数,其原型如下所示:

void merge(int a[], int left_low,  int left_high, int right_low, int right_high)
Run Code Online (Sandbox Code Playgroud)

方向说,为简单起见,我们只采用一个阵列,a[]而且right_low = left_high + 1.我们还将最终值存储在a[]传入的原始数组中.实际上,对于具有值的数组,a[] = {1,3,10,4,7,8}它看起来像这样:

a = {1, 3,     10 ,         4,    7,      8}
     ^         ^            ^             ^ 
  left_low  left_high    right_low     right_high
Run Code Online (Sandbox Code Playgroud)

对于这项任务,我们必须通过一些测试.第一个是两个数组之间的简单合并.第二个是教师自己的 merge_sort函数,他调用了一些随机排序的数组.这是我的实现merge():

void merge(int a[], int left_low,  int left_high,
                    int right_low, int right_high) {
    int temp[right_high + 1]; // temporary array to store the result
    int left_i = left_low, right_i = right_low, temp_i …
Run Code Online (Sandbox Code Playgroud)

c++ arrays sorting mergesort

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

在分析C++应用程序时,Apple Instruments会破坏符号并使符号名称变灰

我正在尝试使用Apple Instruments分析大型C++应用程序.我也想这样做,恕不建立在我的项目Xcode工程/工作空间(因为我有依赖性/库/ makefile文件已经成立了一个疯狂的金额).

为此,我启动了仪器Xcode/Contents/Applications/Instruments并选择了时间分析器.对于我的目标,我将其设置为我想要分析的二进制文件.然后我将工作目录设置为我的项目文件所在的位置(以及后续的dSYM文件位于该目录下的文件夹中).我在程序中添加了相关参数,然后点击了记录按钮.

现在它成功记录了运行,我可以看到我的程序在控制台部分正确执行.但是,在我的符号下,我应该看到函数和代码行是那些灰色的符号的错位值.它看起来像这样:

仪器输出

我在网上看到这是因为它无法找到特定应用程序的符号库.我的应用程序的这个dSYM文件位于/working_directory/bin/application.dSYM.所以我去了File -> Symbols,这显示: 符号菜单

所以我点击了sh图标并找到了application.dSYM.但是,如果选中,我会收到一条错误消息:No new libraries to symbolicate: The specified path didn't locate a dSYM for any of the selected libraries.

我不确定如何设置我的代码以便Instruments可以读取符号?

c++ macos xcode profiling instruments

10
推荐指数
0
解决办法
727
查看次数

没有可行的从"Class*"到"Class"C++的转换

我觉得这应该很简单但无论出于什么原因我都无法让它发挥作用.

我正在尝试创建一个类的实例,可以传递给其他函数并直接编辑.

例如:

main()
{
    ClassFoo foo = new ClassFoo();
    someFunction(foo);
}

void someFunction(ClassFoo& f)
{
    f.add("bar");
}
Run Code Online (Sandbox Code Playgroud)

问题是,在编译时,我最终会遇到此错误.

no viable conversion from 'ClassFoo *' to 'ClassFoo'
    ClassFoo foo = new ClassFoo();
             ^    ~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

它还说其他候选构造函数不可行,但是在我的ClassFoo类中我确实有一个如下所示的构造函数:

ClassFoo::ClassFoo()
{}
Run Code Online (Sandbox Code Playgroud)

那么我怎样才能ClassFoo在函数中完成变量的编辑?

c++ reference class

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

PHP 7.4 和 Ubuntu 18 - PHP 启动:无法加载动态库“curl.so”

我正在使用PHP 的ondrej ppa并运行 Ubuntu 18。运行php -v会给出以下输出:

PHP Warning:  PHP Startup: Unable to load dynamic library 'curl.so' (tried: /usr/lib/php/20190902/curl.so (/usr/lib/php/20190902/curl.so: symbol curl_mime_addpart version CURL_OPENSSL_4 not defined in file libcurl.so.4 with link time reference), /usr/lib/php/20190902/curl.so.so (/usr/lib/php/20190902/curl.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP 7.4.2 (cli) (built: Jan 23 2020 11:21:30) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.2, …
Run Code Online (Sandbox Code Playgroud)

php linux ubuntu curl

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

寻找 2-3-4 树的最小值

首先,这个问题不是家庭作业。我目前正在阅读 Robert Lafore 的“数据结构和算法第 2 版”一书。在第 10 章中,我们学习了 2-3-4 棵树,然后被要求编写一个方法来找到这棵树中的最小值。

从概念的角度来看,我理解最小值在哪里。它只是叶子中最左边的数据项。

从编程的角度来看,我对如何实现一种方法来查找此数据项感到有些困惑。我有一个布尔值可以判断节点是否是叶子。所以我最初做的是这样的:

  public long minValue() {
   Node curNode = root; // current node = root
   long min = curNode.getMin();
   while(!curNode.isLeaf()) { // while current node is NOT a leaf
       curNode = getNextChild(curNode, min);
   } // end while
   return min;
} // end minValue()
Run Code Online (Sandbox Code Playgroud)

这是做什么的(至少我认为它应该做的是创建一个从根节点开始的 curNode。然后创建一个存储 curNode.getMin 的最小值。getMin() 只是在索引 0 处获取数组中的值(其中应该保持最小值。那么,当当前节点不是叶子时,我们应该从最小值点遍历到下一个子节点。一旦当前节点是叶子,它应该返回最小值。

但这不起作用。有没有人知道如何实现这一点?提示或建议或其他任何东西?

编辑:要查看每个类以及它们如何交互,这里是每个单独类的链接。我把最小值方法放在我的 Tree234 类中

DataItemNodeTree234以及程序运行的地方Tree234App

java algorithm minimum 2-3-4-tree

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

在java中构建未排序的二叉树的最有效方法是什么?

我需要创建一个未排序的二叉树(一个要求是未排序),它保存一个String值作为其值.我的班级大纲看起来像这样:

public class Node {

 private String desc;
 private Node leftNode = null;
 private Node rightNode = null;

 public Node(String desc) {
  this.desc = desc;
 }

 public String getDesc() {
  return desc;
 }

 public Node getLeftNode() {
  return leftNode;
 }

 public Node getRightNode() {
  return rightNode;
 }
}
Run Code Online (Sandbox Code Playgroud)

最终,我希望能够将具有String描述的任何节点替换为具有新描述的新节点(包括具有旧描述的重复节点).

所以我的问题是,Node在创建未排序的二叉树时,处理s 的插入的最佳方法是什么?

我想到了两种方式.第一种方法是只有两种方法,setLeftNode(Node root, String desc)而且setRightNode(Node root, String desc)有人可以用Node自己选择的方式作为根.如果已经有一个左/右Node,那么它将向前推进直到它击中一个没有左边的节点Node.但这可能通过产生超大的高度来引入问题.

我想到的第二种方式是拥有一个专用的根Node,在这种情况下是第一个Node创建的,然后Node …

java tree binary-tree

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

在主键上调用SELECT*而在SQL中调用属性

我目前正在参加决赛,并对其中一个练习问题提出疑问.

问题是:

R(A,B)在属性A为主键的关系上考虑以下两个SQL查询.

查询1: SELECT * FROM R WHERE B > 50 OR B <= 50

查询2: SELECT * FROM R WHERE A > 50 OR A <= 50

哪个是对的?

一个.查询1和2返回所有记录R

湾 查询2返回所有记录R,但查询1可能不会

官方回答说b是正确的,但我想知道原因.我知道主键必须是唯一的,这意味着查询2应该返回每条记录.但即使存在重复B值,查询1也不会返回每条记录吗?

mysql sql select primary-key

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

在C中实现strcpy时出现问题

对于家庭作业,我应该实现string.h库的所有22个函数(2fun2handle).我已经失去了很多功能,但在尝试实现strcpy时遇到了一些麻烦.

经过相当多的修改,这是我对该功能的尝试:

char *new_strcpy(char *dest, const char *src){
    char *copy = (char *) src;
    for(; *copy != '\0'; ++copy, ++dest)
        *dest = *copy;
    return dest;
}
Run Code Online (Sandbox Code Playgroud)

我认为这样可以正常工作.但是,在通过这样一个简单的示例测试我的代码时:

char src[50], dest[50];
new_strcpy(src,  "src");
new_strcpy(dest,  "dest");
printf("dest: %s\n", dest);
printf("src: %s\n", src);
Run Code Online (Sandbox Code Playgroud)

我的输出最终看起来像这样:

dest: dest$
src: src$$$$
Run Code Online (Sandbox Code Playgroud)

当它应该看起来像这样:

dest: dest
src: src
Run Code Online (Sandbox Code Playgroud)

在实现这个函数之前,我已经使用指针将src字符串复制到dest字符串而没有问题..所以我不确定为什么现在这样做.有什么明显的东西我做错了吗?还要注意我已经尝试使用while循环并循环直到*copy为空,并且我已经尝试直接循环遍历传入的原始*dest*src参数.

c string strcpy

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

如何在C中使用读取和写入过去的BUFSIZ

对于作业,我应该创建两种方法:方法一将输入文件read()转换write()为空输出文件,一次一个字节(缓慢)。

另一种方法将使用char buf[BUFSIZ];where BUFSIZis from <stdio.h>。我们应该这样做read(),并且write()这样做BUFSIZ会让事情变得更快。

我们测试每个方法的输入文件只是一个 Linux 字典 ( /dict/linux.words)。

我已经正确实现了方法一,我一次调用一个字符,将输入文件复制到输出文件read()write()虽然速度很慢,但至少把所有东西都复制过来了。

我的代码如下所示:

// assume we have a valid, opened fd_in and fd_out file.
char buf;
while(read(fd_in, buf, 1) != 0)
    write(fd_out, buf, 1);
Run Code Online (Sandbox Code Playgroud)

然而,对于方法二,当我使用 时BUFSIZ,我无法将每个条目传输到输出文件中。它在条目中失败z,并且不再写入。

所以,我的第一次尝试:

// assume we have a valid, opened fd_in and fd_out file
char buf[BUFSIZ];
while(read(fd_in, buf, BUFSIZ) != 0)
    write(fd_out, buf, …
Run Code Online (Sandbox Code Playgroud)

c linux system file stdio

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

重置数组并使用bash脚本中的值填充它

我想知道这样做的"正确"方法.基本上,我有一个名为数组的文件列表current.这被声明为一个全局变量,如下所示:current=().我已成功将所有文件放在此数组中.但是现在,我正在通过解析参数来过滤掉这些文件和目录.

例如,为了执行-name '*.pattern'命令,我通过在patternprocess_name()其中执行此:

process_name ()
{
    local new_cur=()
    for i in "${current[@]}"; do
        if [[ "$i" == "$1" ]]; then
            new_cur+=("$i")
        fi
    done
    current=( "${new_cur[@]}" )
}
Run Code Online (Sandbox Code Playgroud)

循环结束后,我想"清除"我的current数组.然后我想循环遍历new_cur数组,并基本上使它等于current,或者如果我可以,只是做一些事情$current = $new_cur(虽然我知道这将无效).

我已经尝试在for循环(in process_name())之后执行此操作,但我的数组current实际上并没有改变:

current=( "${new_cur[@]}" )
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?或者正确的方法吗?

linux arrays bash shell

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