小编bit*_*ask的帖子

使用fork动态创建MPI进程?

如果我使用MPI,我在运行主程序时指定了许多进程.但是,我想从一个进程开始,并在运行时动态决定是否以及何时需要更多进程,以便关闭更多进程.是或类似的东西可能吗?

否则我将不得不重新发明我非常想避免的MPI.

fork mpi inter-process-communicat

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

将文件读入结构(C++)

我正在尝试从二进制文件中读取数据并将其放入结构中.前几个字节data.bin是:

03 56 04 FF FF FF ...
Run Code Online (Sandbox Code Playgroud)

我的实施是:

#include <iostream>
#include <fstream>

int main()
{
    struct header {
        unsigned char type;
        unsigned short size;
    } fileHeader;

    std::ifstream file ("data.bin", std::ios::binary);
    file.read ((char*) &fileHeader, sizeof header);

    std::cout << "type: " << (int)fileHeader.type;
    std::cout << ", size: " << fileHeader.size << std::endl;

}
Run Code Online (Sandbox Code Playgroud)

我期待的输出是type: 3, size: 1110,但由于某种原因它是type: 3, size: 65284,所以基本上跳过文件中的第二个字节.这里发生了什么事?

c++ binary struct file

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

为什么像count和erase这样的unordered_set操作会返回size_type?

显然,unordered_set::eraseunordered_set::count返回一些不严格的布尔值(逻辑上,也就是说,我不是在谈论实际类型).

链接页面读取第三版擦除:

size_type erase( const key_type& key );
Run Code Online (Sandbox Code Playgroud)

使用键值键删除元素

这有一个基调,表明可能不只有一个元素与给定的键.它没有明确说明这一点,但听起来很多.
现在,一个集合的点,即使是无序集合,也就是让每个元素一次.

标准库确认存在bool类型,并将其用于布尔值,如unordered_set::empty().那么,size_type在上述案例中返回的重点是什么?即使存在哈希冲突,容器也应该区分具有不同键的元素,对吧?我还能依靠吗?

c++ hashset unordered-set c++-standard-library

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

如何使用goto打破嵌套循环

如何使用"goto"语句来摆脱循环

for(i = 0; (i < 9); i++)
    {
        for(j = 0; j < 9; j++)
        {
            //cout << " " << Matrix[i][j];
            //cout << "i: " << i << endl;
            if(Matrix[i][j] == 0)
            {
                //temp = 10;
                [goto] ;
                //break;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我想保留i和j离开嵌套for循环时的值.我怎样才能使用goto语句呢?

c++ for-loop goto

5
推荐指数
2
解决办法
7159
查看次数

为什么我可以std ::将流rvalue ref移动到左值ref?

据我理解C++ 11引用,我不能将rvalue引用绑定到(非const)左值引用,因为前者可能绑定到临时,后者绝不能绑定到临时.

但是我发现这个奇怪的行为结合临时流对象(我尽可能减少)

struct Dummy {};
template <typename Stream>
Stream& operator<<(Stream& s, Dummy) {
  return s << ".";          // <- (A)
}

template <typename Stream>
void pass(Stream&& s) {
  std::move(s) << Dummy();  // <- (X)   rvalue->lvalue conversion?
}

#include <fstream>
int main() {
  pass(std::fstream("test",std::ios::out));
}
Run Code Online (Sandbox Code Playgroud)

如果我写s << Dummy()在一行(X),C++抱怨排队(A),说

error: invalid initialization of reference of type ‘std::basic_fstream<char>&’ from expression of type ‘std::basic_ostream<char>’

但是,为什么代码(如上所示)编译并按预期工作?返回的右值引用std::move应该只是作为无法被绑定到一个左值参考作为表达s是,但两者gcc 4.6.1gcc 4.7.2相同反应. …

c++ iostream rvalue-reference move-semantics c++11

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

尽管没有输入,为什么民意调查会继续返回?

我写了一个小测试程序来弄清楚如何交谈poll.我创建了三个文件testa,testb,testc和写入字符串hello\n到第一.所以,这是我的调用poll:

poll(polls.data(),polls.size(),-1)
Run Code Online (Sandbox Code Playgroud)

根据联机帮助页,超时-1应该表明系统调用永远不会超时.但是,它不停地返回而没有任何东西可读.我总是消耗输入的一个字节,可以看到hello\n正在打印,但民意调查不止于此.它只是一直假装有东西要读.

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/fcntl.h>
#include <sys/poll.h>
#include <unistd.h>
#include <errno.h>

#include <vector>
#include <map>
#include <string>
#include <iostream>

typedef int fd_t;

int main() {
  fd_t const a = open("testa",O_RDONLY);
  fd_t const b = open("testb",O_WRONLY);
  fd_t const c = open("testc",O_RDWR);
  std::map<fd_t,std::string> names{{{a,"testa"},{b,"testb"},{c,"testc"}}};

  std::vector<pollfd> polls;
  polls.push_back(pollfd{a, POLLIN, 0});
  polls.push_back(pollfd{b, 0, 0});
  polls.push_back(pollfd{c, POLLIN, 0});

  while (poll(polls.data(),polls.size(),-1)) {
    for (auto p : …
Run Code Online (Sandbox Code Playgroud)

c++ linux file-descriptor poll-syscall

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

我可以影响应用的Git藏匿时所使用的"递归"合并策略?

我有一组生活在git存储槽中的调试实用程序; 我正在分支机构之间移动,这些分支机构之间的差异很小.我git stash apply在相应分支上的顶部存储来测试功能.

但是我在其中一个分支中遇到了合适的合并冲突,但是我想更喜欢藏匿中的内容,所以我希望合并策略"递归"更喜欢来自藏匿的版本(我这就是"他们的",参见man git-merge章节MERGE-STRATEGIES,小节" recursive.

我可以以某种方式告诉使用git stash apply什么合并策略?

git merge branch git-stash

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

如何在两个中删除一个git存储库?

我有一个git存储库,它有几个提交到不同的子目录,我想以下面的方式将存储库切成两个:

/
  sub1/
  sub2/
  sub3/
Run Code Online (Sandbox Code Playgroud)

->

/
  sub1/
Run Code Online (Sandbox Code Playgroud)

个别潜艇已发展到sub1应该是独立存储库的地步.此外,没有一个提交触及多个子.

因此,我想以某种方式提取一个新的存储库,该存储库只接受提交,sub1同时保留所有其他内容.但我想保留历史记录(但没有相关的提交sub2也没有sub3).

注意:我依稀记得有一些命令可以做到这一点,但我自己从未使用它,也不记得它被称为什么,所以我无法搜索它.

git

5
推荐指数
0
解决办法
103
查看次数

xor-swap可以扩展到两个以上的变量吗?

我一直试图将xor-swap扩展到两个以上的变量,比如n变量.但我无处可去3*(n-1).

对于两个整数变量x1,x2您可以像这样交换它们:

swap(x1,x2) {
  x1 = x1 ^ x2;
  x2 = x1 ^ x2;
  x1 = x1 ^ x2;
}
Run Code Online (Sandbox Code Playgroud)

因此,假设你有x1... xn有值v1... vn.显然,你可以通过连续应用swap来"旋转"这些值:

swap(x1,x2);
swap(x2,x3);
swap(x3,x4);
...
swap(xm,xn); // with m = n-1
Run Code Online (Sandbox Code Playgroud)

您将结束x1 = v2,x2 = v3..., xn = v1.

哪些成本n-1交换,每个成本3都是xors,让我们留下(n-1)*3xors.

是一个更快的算法使用xor和赋值,没有其他变量已知?

arrays algorithm swap bit-manipulation

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

如何在 C++17 中定义用户定义的字符串文字运算符模板?

根据我的C++17(草案)版本(16.5.8 [over.literal]) 以及cppreference.com,C++17应该支持用户定义的字符串文字的模板化运算符。

具体来说:

template <char...>
double operator "" _pi() {
    return 0.;
}

int main() {
  "test"_pi;
}
Run Code Online (Sandbox Code Playgroud)

然而,gcc 和 clang 都对我大喊大叫:

// gcc -Wall -Wextra -pedantic -std=c++17
error: no matching function for call to 'operator""_pi<char, 't', 'e', 's', 't'>()'
    7 |   "test"_pi;
      |   ^~~~~~~~~
note: candidate: 'template<char ...<anonymous> > double operator""_pi()'
    2 | double operator "" _pi() {

// clang -Wall -Wextra -pedantic -std=c++17
error: no matching literal operator for call to …
Run Code Online (Sandbox Code Playgroud)

c++ g++ string-literals clang++ c++17

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