小编mah*_*ood的帖子

清除 multi_index_container

我的代码(不是我的代码)中有一个类使用 boost multi_index_container

template <class T_key, class T_val>
class foo_map {
  typedef MapEntry_T<T_key, T_val> MapEntry;

  typedef multi_index_container
  < MapEntry
  , indexed_by
  < sequenced< tag<by_LRU> >
  , ordered_unique
  < tag<by_index>
  , member<MapEntry, T_key, &MapEntry::first>
  >
  >
  > MapTable;
  typedef typename MapTable::template index<by_index>::type::iterator IndexIter;

  MapTable theMap;

public:
  typedef IndexIter iterator;
  void erase(iterator iter) {
    theMap.get<by_index>().erase(iter);
  }
Run Code Online (Sandbox Code Playgroud)

};

假设所有变量和类型都已正确定义。我不想弄乱片段。该代码实际上有效。我想要做的是添加一个clear函数来擦除所有元素。

  void erase(iterator iter) {
    for (iter = theMap.begin(); iter != theMap.end(); iter++ )
      theMap.get<by_index>().erase(iter);
  }
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?关于这个,我收到了 100 行错误!!!

c++ boost boost-multi-index

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

将元素插入到std :: set会导致多个错误

考虑以下课程

#include <set>
#include <vector>
using namespace std;
class foo {
public:
  struct spatial {
    bool block;
    char status;  // H, M, Z
  };

  typedef pair< int, vector<spatial> > way;  // tag + spatial vector
  typedef set< way > one_set;


  void bar() 
  {
     way theWay;
     theWay.first = 10;

     one_set theSet;
     one_set::iterator sit = theSet.end();
     if (theSet.size() == 16) {
        sit = theSet.begin();
     }
     theSet.insert(sit, theWay);
  }
};
Run Code Online (Sandbox Code Playgroud)

对于插入函数,我收到这些错误,我不知道这是什么意思

error C2784: 'bool std::operator <(const std::vector<_Ty,_Ax> &,const std::vector<_Ty,_Ax> &)' : could not …
Run Code Online (Sandbox Code Playgroud)

c++ set

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

擦除元素时std :: vector中可能存在的不一致

在调试向量时,我发现不一致.假设以下代码尝试从只有一个元素的向量中删除一个条目

#include <iostream>
#include <vector>
std::vector<int> v;
void myremove(int);
int main()
{
  v.push_back(10); 
  std::cout << "10 pushed back\n";
  myremove(10);
  std::cout << "done :)\n";
  return 0;
}

void myremove( int a )
{
  std::vector<int>::iterator it = v.begin();
  int counter = 0;
  for ( ; it != v.end(); it++ ) {
    std::cout << "iterating for " << counter << " times and vector size is " << v.size() << "\n";
    if ( a == (*it) ) {
      v.erase(it);
      std::cout << "removed " …
Run Code Online (Sandbox Code Playgroud)

c++ vector

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

试图在std :: cout和std :: ifstream之间切换

我想从任何一个std::cinstd::ifstream从命令行确定的输入读取.该命令看起来像./run 1./run 2.现在,我必须根据读取模式编写两个几乎相似的函数.

void read1()
{
  int a, b;
  while (std::cin >> a >> b) {
    // do something
  }
}
Run Code Online (Sandbox Code Playgroud)

要么

void read2()
{
  int a, b;
  std::ifstream fin("file.txt");
  while (fin >> a >> b) {
    // do something
  }
}
Run Code Online (Sandbox Code Playgroud)

对于大循环,很难保持这两个函数,因为循环部分是常见的,唯一的区别是输入源.

如何整合这两个功能?

c++ cin ifstream

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

CUDA中的FMAD格式

我找不到解释CUDA中以下指令格式的文档

FMAD R6, -R6, c [0x1] [0x1], R5;
Run Code Online (Sandbox Code Playgroud)

格式是什么(来源,目的地......),那是-R6什么?

cuda

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

在远程节点上的 ssh 命令中使用 SED

我写了一个脚本 ssh 到一些节点并sed在节点内运行一个命令。脚本看起来像

NODES="compute-0-3"
for i in $NODES 
do
  echo $i
  ssh $i 'sed -i \'s/172.16.48.70/172.20.54.10/g\' /etc/hosts;'
done
Run Code Online (Sandbox Code Playgroud)

但是,错误是

unexpected EOF while looking for matching `''
syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)

似乎字符'不被视为sed命令的开始。

ssh bash sed

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

不推荐将字符串转换为字符*

我想从命令行获取文件名或为其设置默认名称.所以,以前我用过

static char *fName;
if (argc == 2 ) {
    fName = argv[1];
}
else {
    fName = "default_file.txt";
}
Run Code Online (Sandbox Code Playgroud)

但是对于else,我得到了warning: conversion from a string literal to "char *" is deprecated.如果我尝试这样的事情:

static char fName [30] = "default_file.txt";
if (argc == 2 ) {
    fName = argv[1]; //error
}
Run Code Online (Sandbox Code Playgroud)

现在,我明白了error: expression must be a modifiable lvalue.那么,我该如何解决这个问题呢?

c string char nvcc

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

使用processbuilder加载所有env变量

我想在从java代码执行脚本之前加载我在.bashrc文件中定义的变量.该脚本通过ProcessBuilder执行.在网络上,我看到命令数组应该bash -c如下所示:

String[] cmdline = {"/bin/bash", "-c", "python", "/home/mahmood/temp.py"};
final ProcessBuilder pb = new ProcessBuilder(cmdline);
pb.command(cmdline);
pb.redirectOutput(Redirect.INHERIT);
final Process p = pb.start();
int exitCode = p.waitFor();
if (exitCode != 0) {
   throw new IOException("... python failed :( \n");
}
Run Code Online (Sandbox Code Playgroud)

确实,waitFor永远不会回来!如果我删除了bash -c,那么exitCode由于没有加载变量,因此将为非零.

请注意.bashrc中没有单个变量.我可以使用ProcessBuilder解决问题,还是有更好的选择?

java bash processbuilder

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

在C中返回一个typedef

在我定义的.h文件中:

#define PAIR_TYPE(type1, type2)\
    typedef struct {     \     // added \ after edit  
      type1 first;       \     // added \ after edit  
      type2 second;      \     // added \ after edit  
    };     // added ; after edit        
#define MAKE_PAIR(val1, val2) {val1, val2}
PAIR_TYPE(char *, uint32_t) mypair;
mypair foo();
Run Code Online (Sandbox Code Playgroud)

在.c文件中,我使用它像这样:

mypair foo()
{
   mypair p;
   uint32_t bar = calculate();
   p = MAKE_PAIR("normal", target);
   return p;
}
Run Code Online (Sandbox Code Playgroud)

但是我收到此错误:

错误:'{'标记之前的预期表达式

它指出的界线是:

p = MAKE_PAIR("normal", target);
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会说'{'!!! 那条线上没有'{'.

c typedef return

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

如何在Mercurial中设置我的用户名?

运行Mercurial时出现此错误:

t3@des:gem5$ hg qnew my_p.diff
abort: no username supplied (see "hg help config")
Run Code Online (Sandbox Code Playgroud)

hg help config说:

The configuration files use a simple ini-file format. A configuration file
consists of sections, led by a "[section]" header and followed by "name =
value" entries:

  [ui]
  username = Firstname Lastname <firstname.lastname@example.net>
  verbose = True
Run Code Online (Sandbox Code Playgroud)

但那个ini文件在哪里?

mercurial

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

标签 统计

c++ ×4

bash ×2

c ×2

boost ×1

boost-multi-index ×1

char ×1

cin ×1

cuda ×1

ifstream ×1

java ×1

mercurial ×1

nvcc ×1

processbuilder ×1

return ×1

sed ×1

set ×1

ssh ×1

string ×1

typedef ×1

vector ×1