小编Ale*_*lex的帖子

从C++中的链表中删除一个元素

我现在正在努力学习C++,因为我将不得不采用一个类,而且它来自Java.我目前正在阅读"跳入C++"一书并完成练习.在阅读链接列表的部分后,它告诉我创建自己的链表并有一个方法可以删除一个元素(使用练习中的指针).

到目前为止,我已经能够为我的链表添加值,并显示我链接的链表.当仁不让remove元素方法,以及具有我的程序明确地告诉我,它已经在特定的内存地址删除值后,我再次显示在列表中找到自己的价值仍然以某种方式出现在已理应被删除的内存地址.

这是我的removeElement方法:

// remove an element from the linked list
void removeElement(int remValue) {
    // to remove an element, we go through the list, find the value given
    // if we find it, stop
    // to remove, disconnect the link
    // relink the two values now (ie. value 1->2->3->NULL, 2 is removed, 1->3->NULL )
    LinkedList* current = head;
    LinkedList* next = current;
    while(current != NULL) {
        if(current->value == remValue) { // if match
            break; // break out of while …
Run Code Online (Sandbox Code Playgroud)

c++ pointers linked-list list

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

在 C 中使用 execvpe 执行命令

对于一个项目,我应该将命令的输出通过管道传输到我的 C 程序(称为执行),然后该程序将执行该命令。

\n\n

例如,运行这个:\n echo ls -lR /usr | ./execute,将获取输出 ( ls -lR /usr) 并将其传递到我的 C 程序中,然后该程序将执行ls -lR /usr

\n\n

根据指示,我应该用来execvpe()实际执行程序,但是我找不到任何有意义的文档,也无法在不出现这些错误的情况下让它工作:

\n\n
execute.c: In function \xe2\x80\x98main\xe2\x80\x99:\nexecute.c:98: warning: implicit declaration of function \xe2\x80\x98getenv\xe2\x80\x99\nexecute.c:98: warning: assignment makes pointer from integer without a cast\nexecute.c:106: warning: implicit declaration of function \xe2\x80\x98execvpe\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的教授说我必须#include <unistd.h>解析<stdio.h>程序的输入(我也这样做了),然后执行以下操作:

\n\n
int main(void) {\n    char *path;\n    path = getenv("PATH");\n    char *envp[] = {path, NULL};\n    // the initialized array below …
Run Code Online (Sandbox Code Playgroud)

c linux pipe segmentation-fault

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

如何正确使用unordered_map C++

我想std::unordered_map用自定义哈希函数创建一个.我无法弄清楚在哪里声明/如何使用我的unordered_map.

情况就是这样.我有一个叫做的课Object.它非常简单,只包含一个整数id.这是头文件:

// Object.hpp
class Object {
    public:
        Object();
        ~Object(){};
        int   Id();
        void setId(int i);
    private:
        int id;
};
Run Code Online (Sandbox Code Playgroud)

我有一个被称为DataSet容器的类,它将容纳数百万个这样Object的容器.为了简单起见,我只希望能够构建一个DataSet,添加一个,Object从中DataSet删除一个ObjectID DataSet,清除DataSet,并获得大小DataSet.

我希望(并且我需要)在我的DataSet班级中使用的结构是一个std::unordered_map.对于这个映射,我希望键是与a关联的整数id Object,而实际Object*本身是值.最后我有这个哈希函数,我想用它unordered_map.这是我目前在DataSet头文件中的内容:

// DataSet.hpp
struct HashKey {
    unsigned int hash(unsigned int x) {
        x = ((x >> 16) ^ x) * 0x45d9f3b;
        x …
Run Code Online (Sandbox Code Playgroud)

c++ dictionary hashmap c++11

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

构建架构时无法添加外键约束SQL

我现在正在介绍数据库类。对于一项家庭作业,我得到了一段SQL代码,并被告知仅运行一些查询并将结果返回。问题是我什至无法构建老师给我的代码给定的架构。这是这段代码:

CREATE TABLE emp (
  name char(15),
  dno int,
  FOREIGN KEY (dno) REFERENCES dept(dno)
  ON DELETE SET NULL
  ON UPDATE CASCADE
  );

CREATE TABLE dept (
  dno int,
  location char(30)
 );

INSERT INTO emp(name,dno) VALUES
("Tom",111),
("Mary",111),
("Jack",222),
("Henry",222);

INSERT INTO dept(dno, location) VALUES
(111,"Irvine"),
(222,"LA"),
(333,"SF");
Run Code Online (Sandbox Code Playgroud)

当这运行时,我得到一个错误的说法Cannot add foreign key constraint。我尝试通过MySQL工作台和SQL Fiddle来执行此操作,这两者都会产生相同的错误。我真的不知道给我的代码有什么问题,而且在网上查看后,似乎看不到任何明显的东西。

mysql sql foreign-keys

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

从 unordered_map 中删除值的有效方法,当只给出值 C++

我有一个名为的抽象类Object,我使用std::unordered_map<int, Object*> objects将这些Objects包含在一个名为DataSet. 每个对象都有一个id与之关联的对象。

通常,当从 my 中删除对象时unordered_map,我可以执行iterator = find(id)然后调用erase该迭代器。

这是简单而有效的。问题是,我必须实现一种方法来按值删除条目/对,而不是按键(这是我的id)。这给了我以下原型:

int DataSet::DeleteObject(Object* object)

实现这一目标的最有效方法是什么?我想我可以做这样的事情:

if(object){
    for(auto kv : objects) {
        if(kv.second == object) {
            objects.erase(kv);
        }
    }
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

但这似乎非常低效。那么实现这一目标的最有效方法是什么?

c++ iterator unordered-map

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

MySQL升级后,MySQL PDO dbname停止工作

我正在使用PHP和PDO连接到运行MySQL的远程RDS实例。以前它运行的是MySQL 5.7。我将其升级到MySQL 8.0.15。完成此操作后,所有未使用显式模式名称编写的PHP代码都停止工作。

作为参考,我使用dbname指向有效架构的属性连接到pdo 。我还use schema_name;对升级的数据库进行了处理。

这是使用PDO连接的代码:

$database = new PDO('mysql:host=<HOST>;dbname=cool;charset=<CHARSET>, <USERNAME>, <PASSWORD>);
Run Code Online (Sandbox Code Playgroud)

现在,如果我groupscool架构中有一个命名的表,并且执行以下代码:

$sql = 'SELECT * FROM groups';
$sth = $database->prepare($sql);
$sth->execute();
Run Code Online (Sandbox Code Playgroud)

我以前在MySQL 5.7中没有问题,并且可以执行此代码。但是,RDS升级后,出现以下错误:

警告:PDOStatement :: execute():SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法有错误;请参阅附录A。检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在...的第1行的“组”附近使用...

并且查询本身失败。但是,如果我将代码更改为以下内容:

$sql = 'SELECT * FROM cool.groups';
$sth = $database->prepare($sql);
$sth->execute();
Run Code Online (Sandbox Code Playgroud)

我没有任何错误,并且在获取所有内容后都会将其返回。我一直在与AWS支持人员交谈,后者向我保证,他们最终没有错,并且尽管升级中没有保留某些设置(即,数据库名称是随机更改的),但没有任何问题。

PDO是否存在错误?升级后,任何未明确指定架构的查询都将中断,这是一个庞大的旧代码库,这是一个主要问题。我们也无法返回到旧的MySQL版本。

php mysql pdo

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