如何使用 NSCoding 保存我的结构,以便即使用户关闭应用程序它也不会改变?如果您还可以向我展示如何正确实现缺失的代码,我将不胜感激。
使用以下两个新函数更新:这是我的代码:
struct RandomItems: Codable
{
var items : [String]
var seen = 0
init(items:[String], seen: Int)
{
self.items = items
self.seen = seen
}
init(_ items:[String])
{ self.init(items: items, seen: 0) }
mutating func next() -> String
{
let index = Int(arc4random_uniform(UInt32(items.count - seen)))
let item = items.remove(at:index)
items.append(item)
seen = (seen + 1) % items.count
return item
}
func toPropertyList() -> [String: Any] {
return [
"items": items,
"seen": seen
]
}
}
override func viewWillDisappear(_ …Run Code Online (Sandbox Code Playgroud) 对于以下结构体,由于 v 是动态分配的对象,那么内存对齐如何工作?struct S即使 v 的大小变大,其大小也是恒定的吗?那么 v 本质上是作为一个指针(或者某种指针的包装器)工作的吗?
struct S {
ANY_TYPE a;
std::vector<ANY_TYPE> v;
} s;
Run Code Online (Sandbox Code Playgroud)
如果上述所有问题的答案都是肯定的,那么随着 v 大小的变化,其成员的内存存储在哪里?这些内存是在堆上还是在堆栈上?
编辑:我看到这个问题的反对票,并意识到我应该对 std::vector 本身进行更多研究。我读了这篇文章,一切都清楚了。感谢您的回答!
我有一个带有字段的结构:
type Measure struct {
ID int
IndexName string
IndexValue int
Redistributed float64
MyArray []myObject
}
Run Code Online (Sandbox Code Playgroud)
如果我用
measure := Measure{
ID: 10,
IndexName: "",
IndexName: 0,
Redistributed: 0
MyArray: nil
}
Run Code Online (Sandbox Code Playgroud)
我的内存占用应该是多少?当我用空字段实例化一个结构体时,我是否仍然使用内存?
我很确定我是,但我只需要确认。
我正在阅读一些代码并遇到以下语句:
struct sockaddr_in server
Run Code Online (Sandbox Code Playgroud)
我知道这sockaddr_in是一些预定义的,struct但为什么我们把它struct作为前缀?也如下所示,尝试了类似的事情
我不能只写:
sockaddr_in server
Run Code Online (Sandbox Code Playgroud) using namespace std;
#include <iostream>
#include <cstring>
struct distance {
int Kilometer;
int Meter;
int Centimeter;
};
distance add() {
}
int main() {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
试图定义一个返回“距离”数据类型的函数。在尝试定义函数时,我遇到了“距离不明确”的问题。
我怎么能做这样的事情?
我试图将 astruct作为参数传递给Go 中的函数。
func handleEntityProperties(w http.ResponseWriter, r *http.Request) {
const sliceSize = 100
var entityProperties struct {
Instance string `json:"instance"`
Entities []struct {
Id string `json:"id"`
Properties map[string]string `json:"properties"`
Type string `json:"type"`
} `json:"entities"`
}
body, err := ioutil.ReadAll(r.Body)
if err != nil {
panic(err)
}
if !json.Valid([]byte(body)) {
fmt.Fprintf(w, "invalid json")
return
}
err = json.Unmarshal(body, &entityProperties)
sendData(entityProperties.Entities[0:100])
return
}
func sendData(entities struct) {
log.Println("Doing things with entities ", entities)
}
Run Code Online (Sandbox Code Playgroud)
正如您在代码中看到的,我试图将 的前 100 个元素发送entityProperties.Entities …
在搜索了很多帖子后,我无法解决我的问题。我想根据一个字段(截止日期)订购一组结构:
typedef struct{
int ident;
int computation;
int period;
int deadline;
}task_t;
task_t *tasks;
int compare(const void *a, const void *b) {
task_t *ia = *(task_t**)a;
task_t *ib = *(task_t**)b;
//task_t *ia = (task_t *)a;
//task_t *ib = (task_t *)b;
return (ia->deadline - ib->deadline);
}
//Randomly generation of parameters of tasks
fprintf(stderr,"before:\n");
for (i=0;i<nT;i++){
fprintf(stderr,"%d;%d;%d;%d\n", tasks[i].ident, tasks[i].computation, tasks[i].deadline,tasks[i].period);
}
size_t size = sizeof(tasks) / sizeof(task_t*);
qsort(tasks, size, sizeof(task_t *), compare);
fprintf(stderr,"\after:\n");
for (i=0;i<nT;i++){
fprintf(stderr,"%d;%d;%d;%d\n", tasks[i].ident, tasks[i].computation, tasks[i].deadline,tasks[i].period);
}
Run Code Online (Sandbox Code Playgroud)
在qsort之前和之后,结果是一样的。我认为问题是指针,但我不知道如何解决。我尝试了很多组合 qsort(&tasks, …
在 C++ 中,我可以创建一个只能动态分配的结构吗?我想强制执行一种方法来确保程序员不能静态分配这个结构,因为这样做会导致悬空指针,因为我需要在其范围之外使用指针的内容。
在 Go 中,下面有什么区别?
我试图搜索,但我想不出一个合适的术语来描述它们。它们的正式名称是什么?
#1 - 结构内的父级:
type MyTime struct {
time.Time
}
Run Code Online (Sandbox Code Playgroud)
#2 - 在我的类型之后没有结构定义的父级:
type MyTime time.Time
Run Code Online (Sandbox Code Playgroud)
对于#2,我可以用另一个 time.Time 来初始化我的类型mt := MyTime(t)。如何使用另一个 time.Time 变量初始化 #1 类型?
我已经声明了一个结构变量,它是另一个结构的动态数组,但程序每次都崩溃。我哪里做错了?需要采取哪些必要步骤?我正在使用 DEVC++。
#include<iostream>
#include<cstdlib>
using namespace std;
struct Project{
int pid;
string name;
};
struct employee{
int eid;
string name;
Project *project_list;
};
int main(){
struct employee e;
e.eid = 123;
e.name = "789";
e.project_list = (Project *)malloc(2 * sizeof(Project));
e.project_list[0].pid = 100;
e.project_list[0].name = "Game";
}
Run Code Online (Sandbox Code Playgroud)