最近我用C编写了很多代码,我注意到,在我的程序中花费大部分时间的事情是调整动态数据结构的大小.假设我们有一个包含字符的数组,我想在这个数组的末尾添加一些字符.我这样做:
我只是想知道这是否足够有效.例如,我可以想到像树结构这样的东西,我将数组保存在树的节点中,这样,而不是在追加东西之前将旧元素复制到新数组,我只是将新的malloc'ed元素添加到下一个树的节点并在那里附加字符.这样我就可以避免不必要的复制......
所以这只是以不同方式调整大小的一种方式.我应该寻找其他的东西,还是我只是将旧元素复制到新数组的两倍大小的解决方案?
我正在尝试在C中编写hashset,并且我发现了一个哈希函数,它根据数据中的位进行哈希处理.我有以下结构:
struct triple
{
int a;
int b;
int c;
};
Run Code Online (Sandbox Code Playgroud)
问题是 - 如何从类型的对象获取位表示struct triple?假设我想用8位整数对其位进行异或.我该怎么办?
我想让对象请求JavaScript承诺,但我不希望它们创建单独的promise.我想要实现的逻辑如下 - 检查一个承诺是否未决,只有不承诺,创建一个新的承诺.这可能吗?根据文档,我无法检查承诺的状态,我只能在它满满后处理它,但我不想为每个承诺请求调用处理程序,如果一个Promise的回调可以,我不想运行多个Promises回应所有过去的请求......
我试图以这种方式解决的问题是从外部服务器获取数据并在接收后通过事件将其广播到多个对象.
首先要做的事情 - 我有一个文本文件,其中有二进制数,每行一个数字.我正在尝试阅读它们并在C++程序中总结它们.我写了一个函数,将它们转换为十进制并在此之后添加它们,我确信该函数没问题.这是我的问题 - 对于这两种不同的阅读文本文件的方式,我得到了不同的结果(这些结果中只有一个是正确的)[我的函数是十进制()]:
ifstream file;
file.open("sample.txt");
int sum = 0;
string BinaryNumber;
while (!file.eof()){
file >> BinaryNumber;
sum+=decimal(BinaryNumber);
}
Run Code Online (Sandbox Code Playgroud)
这样我的总和太大了,但数量很少.
ifstream file;
file.open("sample.txt");
int sum = 0;
string BinaryNumber;
while (file >> BinaryNumber){
sum+=decimal(BinaryNumber);
}
Run Code Online (Sandbox Code Playgroud)
这种方式给了我正确的金额.经过一些测试后,我得出结论,eof()的while循环比另一个循环更多迭代.所以我的问题是 - 从文本文件中读取这两种方式有什么区别?为什么第一个while循环给了我错误的结果,这可能是它正在进行的额外迭代?
我需要编写一个函数来检测传入它的数字是否未定义.在ocaml toplevel我发现了一些有趣的东西.
nan = nan;;
Run Code Online (Sandbox Code Playgroud)
这被证实是错误的.但后来我发现了一些更奇特的东西
nan == nan;;
Run Code Online (Sandbox Code Playgroud)
评估为真.=和==之间有什么区别,以及为什么第一次比较在将两个nans与自己进行比较时返回false?
我正在尝试实现定义对象顺序的泛型类.这是我的代码片段:
import java.util.ArrayList;
public class OrderedObject<T> implements Comparable<OrderedObject<T>> {
private T object;
private int orderId;
public OrderedObject(T object, int orderId) {
this.object = object;
this.orderId = orderId;
}
public T getObject() {
return object;
}
public static ArrayList<OrderedObject<T>> defineOrder(ArrayList<T> objects) {
ArrayList<OrderedObject<T>> orderedObjects = new ArrayList<OrderedObject<T>>();
for (int i = 0; i < objects.size(); i++) {
T object = objects.get(i);
OrderedObject<T> orderedObject = new OrderedObject<T>(object, i);
orderedObjects.add(orderedObject);
}
return orderedObjects;
}
@Override
public int compareTo(OrderedObject<T> o) {
return orderId - …Run Code Online (Sandbox Code Playgroud) 我正在创建一个具有初始化构造函数的类,const char*应该使用缓冲区中提供的应该包含字符串的数据安全地构造对象.我担心的是,用户可以使用带有错误数据的构造函数,例如NULL指向未分配内存的指针或指针等等.关键是,在这种情况下,我想完成创建对象(它将处于未定义但正确的状态),而不会导致段错误,例如,如果用户向我发送了指向我不应该读取的数据的指针.我想将所有输入验证发送到std::string构造函数,因此构造函数看起来像这样:
Foo(const char *s) : Foo(std::string(s)) {}
Run Code Online (Sandbox Code Playgroud)
但我的老师称这是一个"错误的想法".那么,处理这种情况的正确方法是什么呢?
还有一件事,我不能在这种情况下使用例外(这是我课程作业的一部分,当然还没有教过它).
我试图在我的应用程序中编写一个暂停/取消暂停所有线程,这由SIGUSR1(暂停)和SIGUSR2(取消暂停)激活。我想到要pthread_cond_wait()在所有线程中使用,并且在接收到信号时,pthread_cond_broadcast()在有条件的情况下使用我会挂起所有线程,但是显然pthread_cond_broadcast()在信号处理程序中使用它是不安全的...是否有其他替代方法可以解决此问题(我必须避免忙等)?
这是其中一个问题,在任何更高级别的语言中都是小菜一碟,但是当用纯C语言编写它时,我不知道该怎么做才能不把我的代码变成一团糟:
我有一个独特字母的字母表,以及一些带有一些数字的字符串,例如"test01test21".我需要生成所有字符串,这些字符串是用字母替换数字(所以每个数字0,1,2,...得到它的字母(不一定是唯一的),我们需要遍历所有可能的字母数字替换,以便生成所有字符串),并以某种方式返回这些字符串.
问题似乎很容易,但我想的越多,问题就越多.当返回结果时,我已经编码了动态字符串列表结构,因此它不是主要问题.我想知道的是如何遍历所有字母数字替换(请记住,数字集不是常数,要在一个字符串中替换的数字可能是{0,1,2}而在另一个字符串中{例如,3,7,9},但它总是一些数字集合,这里有几种方法我做过这样的思考:
我真的想不出别的什么.我认为这两种方式都存在缺陷,导致代码非常复杂.问题是 - 当你必须在C中解决这类问题时该怎么办?我会感谢任何有助于我编写代码并以某种方式组织代码的提示......
样本输出:
字母"ab"
字符串"ab01"
输出{"abaa","abab","abba","abbb"}
我试图在C++中实现一个递归结构,看起来应该是这样的:
typedef struct {
static constexpr int foo() {
return 1;
}
typedef struct {
// not valid - I meant foo() from "type" not from "recursive_type"
static constexpr int foo() {
return 2 * foo();
}
// ? (there should be another recursive type here)
} recursive_type;
} type;
Run Code Online (Sandbox Code Playgroud)
这应该是这样的:
static_assert(type::foo() == 1, "Nope");
static_assert(type::recursive_type::foo() == 2, "Nope");
static_assert(type::recursive_type::recursive_type::foo() == 4, "Nope");
Run Code Online (Sandbox Code Playgroud)
基本上 - 我想recursive_type包含看起来完全相同的结构type,但它的foo()返回值是type's的两倍foo().但正如我在评论中指出的那样,我的方法存在一些问题,遗憾的是它不起作用.
可以在C++中以某种方式声明这样的结构,或者可能不可能吗?
以下代码:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
pid_t mypid = getpid();
write(1, &mypid, sizeof(pid_t));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
打印乱码而不是实际的pid.为什么?
这是我在C中的代码片段:
const char *d = "dictionary.dict";
struct dictionary *dict =
dictionary_load_lang(d); // Compile error here
Run Code Online (Sandbox Code Playgroud)
dictionary_load_lang()的类型是struct dictionary *dictionary_load_lang(const char *lang).
在尝试编译时,编译器说"初始化元素不是常量",我看不出原因.这是怎么回事?