小编H'H*_*H'H的帖子

如何在C++中输出文件中的多个空格行

我想知道在C++中是否有任何短命令用于在输出中添加多个空格行?(我知道"endl"和"\n")

谢谢你提前帮助.

c++

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

在C++中的大向量内搜索

我有以下向量:

std::vector<A*> vec;
std::vector<std::pair<A*, A*>> vec_pair;
Run Code Online (Sandbox Code Playgroud)

vec_pair的大小远远大于vec的大小.我想在vec_pair中找到一对,其中两个成员都在vec内部.

这些内容vec_pair是不变的.然而,在每次迭代之后,内容vec会改变,我想再次进行测试.

我知道我可以做一个for循环并做检查.然而,考虑到工作的大小差异复发,我正在寻找一种智能而有效的方法来实现它.

c++ c++11

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

使用apply_visitor从变量的向量中过滤

昨天我问了这个问题并且"juanchopanza"回答了我的问题,但不幸的是我无法抓住其中一个有界类型.由于使用"访客"更加强大,我也想知道有人可以使用"访客"给我一个解决方案吗?

我正在寻找过滤boost变体矢量的最佳方法,该变量已定义如下:

 boost::variant<T1*, T2, T3> Var;
 std::vector<Var> Vec;
Run Code Online (Sandbox Code Playgroud)

当我调用这个向量时,什么是仅过滤T2有界类型并插入新向量的最佳方法?或者换句话说,我想要这样的东西

std::vector<T2> T2Vec =...(如何使用apply_visitor从Vec中过滤它)...

再次感谢!

编辑:@ ForEveR的闷闷不乐:

template<typename T>
struct T_visitor : public boost::static_visitor<>
{
   T_visitor(std::vector<T>& v) : vec(v) {}
   template<typename U>
   void operator () (const U&) {}
   void operator () (const T& value)
   {
      vec.push_back(value);
   }
private:
   std::vector<T>& vec;
};
Run Code Online (Sandbox Code Playgroud)

和:

  std::vector<T1> t1vec;
  T_visitor<T1> vis(t1vec);
  std::for_each(vec.begin(), vec.end(), boost::apply_visitor(vis));
Run Code Online (Sandbox Code Playgroud)

你能告诉我这里有什么问题吗?

c++ boost boost-variant apply-visitor

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

使用"<<"时"+"运算符的有效性

我有问题要在屏幕上打印文字.我虽然没有有效的"+"运算符用于流式传输文本.为什么这个有效:

std::cout <<  ("print this number " + boost::lexical_cast<std::string>(5) + ". " ) << std::endl;
Run Code Online (Sandbox Code Playgroud)

虽然有这样的complie错误:

std::cout <<  ("print this number " + "5" + ". " ) << std::endl;
Run Code Online (Sandbox Code Playgroud)

错误:类型'const char [19]'和'const char [2]'到二进制'operator +'的操作数无效

我使用gcc 4.7.3和C++ 03.

c++ cout

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

在不同的向量中存储正数和负数

我是c ++的新手.我有一个大小为n的向量.我想在新向量中搜索向量广告存储中的正值和负值.我不知道正负值的数量.

谁能帮我?

c++ vector

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

无法将'const char*'转换为'std :: istream*

对你来说似乎很容易,但我被困在这里.这是C++中用于从ASCII文件加载矩阵的函数.

void load_matrix(std::istream* is,
        std::vector< std::vector<double> >* matrix,
        const std::string& delim = " \t")
{
    using namespace std;

    string      line;
    string      strnum;

    // clear first
    matrix->clear();

    // parse line by line
    while (getline(*is, line))
    {
        matrix->push_back(vector<double>());

        for (string::const_iterator i = line.begin(); i != line.end(); ++ i)
        {
            // If we i is not a delim, then append it to strnum
            if (delim.find(*i) == string::npos)
            {
                strnum += *i;
                continue;
            }

            // if strnum is still empty, it means the previous …
Run Code Online (Sandbox Code Playgroud)

c++ istream

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

无法访问在类中为make_unique声明的私有成员

我有以下课程:具有删除副本构造函数的A类。

class A
  {
  public:
    explicit A(int i_a) {a = i_a;};
    ~A(){};
  private:
    A(const A&) = delete;
    A& operator=(const A&) = delete;
    int a;
  };
Run Code Online (Sandbox Code Playgroud)

B类以及一个unique_ptr成员。

class A;
class B
  {
  public:
    B(int i_b);
    ~B() {};

  private:
    std::unique_ptr<A> p_b;
  };
Run Code Online (Sandbox Code Playgroud)

和B.cpp:

B::B(int i_b)
  {
  p_b = std::make_unique<A>(A(i_b));
  }
Run Code Online (Sandbox Code Playgroud)

我在制作A类的unique_ptr时收到此错误:

'A :: A':无法访问在类'A'中声明的私有成员

有人可以向我解释为什么我会收到此错误吗?我知道通过注释此行“ A(const A&)= delete;” 错误将得到解决。但是我正在寻找一些解释。

c++

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

使用不同版本的程序进行 Pytest 测试

我有多个测试适用于我的程序的不同版本。

例如 testA 仅适用于版本 2、3、4,不适用于 5 及更高版本。另一个测试适用于版本 4 及更高版本的测试。根据 pytest 文档,我可以创建一个类似于下面的标记:

# content of test_mymodule.py
import mymodule

minversion3 = pytest.mark.skipif(
    myprogram.__versioninfo__ < 3, reason="at least version 3 is required"
)


@minversion3
def test_function():
    ...
Run Code Online (Sandbox Code Playgroud)

minversion3 标记要运行的测试,前提是程序至少有版本 3。我想对其进行参数化,以便我可以得到如下内容:

@minmaxversion(3.2, 6.1)
def test_function():
    ...
Run Code Online (Sandbox Code Playgroud)

因此该测试仅适用于版本最小为 3.2 且最大为 6.1 的程序。

python pytest pytest-markers

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

派生类中的不良向下转型

我是下面的结构。我最小化到尽可能短的方式来重现错误:

我有两个级别的派生类。我没有任何编译错误。错误出现在运行时:

base.exe 中 0x00007FFF1021CF19 处出现未处理的异常:Microsoft C++ 异常:内存位置 0x00000022B9BDF458 处的 std::__non_rtti_object。

有什么建议吗?

#include <iostream>
#include <vector>
#include <memory>

class Base {
public:
    int a;
    Base(int _a) : a(_a) {};
    virtual void print() = 0;
};

class derivedA : public Base
{
public:
    derivedA(int _a) : Base(_a) {};
    void print() { std::cout << "dA" << std::endl; }
};

class derivedB : public derivedA
{
public:
    derivedB(int _a) : derivedA(_a) {};
    void print() { std::cout << "dB" << std::endl; }
};

void …
Run Code Online (Sandbox Code Playgroud)

c++

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

boost :: bind的性能分析比较for for循环

我改变了

  for(std::set<shape::Face>::iterator face_iter=vec_face.begin(); face_iter!=vec_face.end(); face_iter++)
   {
     hiddenCorner(other, bmap, *face_iter);
   }
Run Code Online (Sandbox Code Playgroud)

for_each(vec_face.begin(), vec_face.end(), boost::bind(hiddenCorner, other, bmap, _1));
Run Code Online (Sandbox Code Playgroud)

显然它不那么冗长,但效率怎么样?

hiddenCorner是一个更新bmap的void函数(bmap是一个std :: map).

注意:vec_face不是一个非常大的设置.

c++ boost

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

将const wchar_t*转换为const std :: basic_string <char_t>的更好方法

我想知道是否有更简单的方法(更简洁)转换const char_t*std::string_t而不是下面:

typedef wchar_t  char_t;
typedef basic_string<char_t> string_t;

std::wstring ws(script_->GetName());  //GetName() returns const char_t*
const std::string wsStr(ws.begin(), ws.end());
const string_t script_name(wsStr.begin(), wsStr.end());
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

编辑

#ifdef OS_WIN
#include <tchar.h>
typedef wchar_t  char_t;
#define CHAR_WIDE
#else
typedef char char_t;
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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