小编Cha*_*les的帖子

我可以通过整数索引访问c ++ std :: map中的元素吗?

我有一个我想要迭代的元素图.当然,标准的方法是使用for循环

for (map<string, int> iterator it = myMap.begin(); it != myMap.end(); ++it) {
    string thisKey = it->first;
    int thisValue = it->second;
}
Run Code Online (Sandbox Code Playgroud)

但是如果我尝试使用OpenMP的并行构造使这个循环并行运行,它就不起作用,这显然是一个已知的问题,因为它不能识别这种循环结构.

所以,我的备份计划是使用整数索引迭代器,并按索引访问键和值列表,就像我在C#中所做的那样:

for (int i = 0; i < myMap.Count; ++i) {
    string thisKey = myMap.Keys[i];
    string thisValue = myMap.Values[i];
}
Run Code Online (Sandbox Code Playgroud)

...但我似乎无法在C++中找到一个等效的方法.有没有办法在C++中做到这一点,我不知道?

c++ dictionary iterator stdmap openmp

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

在Swift中,如何将现有的二进制文件读入数组?

作为我的项目的一部分,我有一个二进制数据文件,由一系列32位整数组成,我的一个类在初始化时读入.在我的C++库中,我使用以下初始化程序读取它:

Evaluator::Evaluator() {
    m_HandNumbers.resize(32487834);
    ifstream inputReader;

    inputReader.open("/path/to/file/7CHands.dat", ios::binary);

    int inputValue;
    for (int x = 0; x < 32487834; ++x) {
        inputReader.read((char *) &inputValue, sizeof (inputValue));
        m_HandNumbers[x] = inputValue;
    }
    inputReader.close();
};
Run Code Online (Sandbox Code Playgroud)

在移植到Swift时,我决定将整个文件读入一个缓冲区(它只有大约130 MB),然后将这些字节从缓冲区中复制出来.

所以,我做了以下事情:

public init() {
    var inputStream = NSInputStream(fileAtPath: "/path/to/file/7CHands.dat")!
    var inputBuffer = [UInt8](count: 32478734 * 4, repeatedValue: 0)
    inputStream.open()
    inputStream.read(&inputBuffer, maxLength: inputBuffer.count)
    inputStream.close()
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好,因为当我调试它时,我可以看到inputBuffer包含我的十六进制编辑器应该说的相同的字节数组.现在,我想有效地从那里获取数据.我知道它存储在......你称之为最低有效字节的第一个格式(即数字0x00011D4A在文件中表示为'4A1D 0100').我很想手动迭代它并手动计算字节值,但我想知道是否有一种快速方法可以传递[Int32]数组并让它读取这些字节.我尝试使用NSData,例如:

    let data = NSData(bytes: handNumbers, length: handNumbers.count * sizeof(Int32))
    data.getBytes(&inputBuffer, length: inputBuffer.count)
Run Code Online (Sandbox Code Playgroud)

但似乎没有加载值(所有值仍为零).有人可以帮我把这个字节数组转换成一些Int32值吗?更好的是将它们转换为Int(即64位整数)只是为了在整个项目中保持我的变量大小相同.

io binary file swift

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

使用DispatchQueue.concurrentPerform(迭代:)的Swift应用程序不再在Mac OS Sierra下同时运行

在Sierra下测试我的代码时,我发现先前处理并发队列的方法不再有效.

在我的C++代码库分析错误,用户的一个建议,涉及明确指定的目标队列声明(看到这个帖子:一个解决办法C++ 11的应用程序,它使用dispatch_apply没有在Mac OS塞拉利昂工作),似乎有解决了这个问题.

在Swift 3中,下面的代码将用于同时执行一个闭包,但它在上面的文章中展示了类似的C++示例:

import Foundation
import GameKit

DispatchQueue.concurrentPerform(iterations: 1000) { index in
    let pauseTime = GKRandomSource.sharedRandom().nextInt(upperBound: 5)
    sleep(UInt32(pauseTime))
    print(index)
}
Run Code Online (Sandbox Code Playgroud)

...但是,当我执行它时,它会串行运行每个块,索引按数字顺序输出.

任何人都知道如何利用该帖子中推荐的解决方法来解决我在Swift中的"并发"调度问题?

grand-central-dispatch swift macos-sierra

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

如何从文件中读取/写入 C# BigIntegers?

在我的一个课程中,我有一个例程来读取和写入 Decimal 类型的数组(使用BinaryReader/BinaryWriter和方法,即:ReadDecimal()Write()

BinaryReader inputReader = new BinaryReader(File.OpenRead(BaseFilePath));
for (int x = 0; x < 6; x++) {
    for (int y = 0; y < m_Codes[x].GetLength(0); y++) {
        for (int z = 0; z < m_Codes[x].GetLength(1); z++) {
            m_Codes[x][y, z] = inputReader.ReadDecimal();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

for (int x = 0; x < 6; x++) {
    for (int y = 0; y < m_Codes[x].GetLength(0); y++) {
        for (int z = 0; z < m_Codes[x].GetLength(1); …
Run Code Online (Sandbox Code Playgroud)

c# serialization biginteger

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

为什么dispatch_queue_create会在Swift中出现EXC_BAD_ACCESS错误?

我正在将一些代码从C++移植到使用Grand Central Dispatch的Swift,我发现一个奇怪的错误,dispatch_queue_create看起来根本不起作用.

例如,在我的C++基类头中,我会声明

dispatch_queue_t m_WorkQ;
Run Code Online (Sandbox Code Playgroud)

并在初始化器中,放

m_ResultQ = dispatch_queue_create("com.myapp.mHitsUpdateQueue", 0);
Run Code Online (Sandbox Code Playgroud)

......一切都很光荣.


我在Swift中尝试过这个,在我的课堂上,在课堂上声明这个:

var resultQueue: dispatch_queue_t
Run Code Online (Sandbox Code Playgroud)

......在初始化者中,我有(除其他外)这条线

resultQueue = dispatch_queue_create("com.myapp.mHitsUpdateQueue", 0)
Run Code Online (Sandbox Code Playgroud)

...它编译并启动正常,但在上面的行上给我一个EXC_BAD_ACCESS(代码= 1,地址= 0x37)的立即运行时错误

为了确定它是否是我做过的任何其他事情,我创建了一个仅包含以下代码的命令行工具应用程序:

import Foundation

var thisQueue = dispatch_queue_create("com.myApp.mHitsUpdateQueue", 0)

println(thisQueue.description)
Run Code Online (Sandbox Code Playgroud)

......果然,我在"thisQueue"分配线上得到了上述错误.所以我非常确定有一些关于Swift和GCD队列创建非常明显的东西,我很遗憾.

有人可以帮帮我吗?

c++ queue port grand-central-dispatch swift

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

Swift是否通过Grand Central Dispatch的dispatch_async进行并行编程的构造?

我有兴趣采用新的Swift编程语言.我维护的代码库通过C++ Grand Central Dispatch扩展(dispatch_async等)广泛使用多核处理.

有没有评论过Swift的人知道这种语言能否以类似的方式访问GCD?

parallel-processing grand-central-dispatch swift

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