小编zeb*_*man的帖子

是否可以在将cout重定向到outfile时cout到终端?

我正在运行一个程序并重定向cout到一个outfile,如下所示:

./program < infile.in > outfile.o  
Run Code Online (Sandbox Code Playgroud)

我希望能够从命令行读取选项('-h'或'--help')并向终端输出帮助消息.有没有办法可以做到这一点,但仍然有cout其他程序的常规转到outfile?

cout要使用这样的事情合适的对象?

c++ bash shell redirect cout

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

大O复杂度c ^ n + n*(logn)^ 2 +(10*n)^ c

我需要推导出这个表达式的Big-O复杂性:

c ^ n + n*(log(n))^ 2 +(10*n)^ c

其中c是常数,n是变量.
我很确定我理解如何单独推导每个术语的Big-O复杂性,我只是不知道当这些术语组合时Big-O复杂性如何变化.
想法?

任何帮助都会很棒,谢谢.

complexity-theory big-o recurrence

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

我正确地实现了这个模板类吗?

好的,我正在尝试实现一个名为Queue的基于数组的队列的模板化类.这就是我做到的.首先,这是实现模板类的正确方法吗?问题是,当我尝试编译时,我收到错误消息

未定义引用'Queue :: Queue()'
未定义引用'Queue :: ~Queue()'

有什么想法有什么不对吗?我声明错误或执行错误吗?

queue.h

#ifndef __QUEUE_H__
#define __QUEUE_H__

template <class T>
class Queue
{
    int first;
    T* array;

  public:
    Queue();
    ~Queue;
    void enqueue(T next);
    T dequeue();
    bool is_empty();
    bool is_full();

};

#endif
Run Code Online (Sandbox Code Playgroud)

queue.cpp

#include "queue.h"

template <class T> Queue<T>::Queue(){
    ...
}
template <class T> Queue<T>::~Queue(){
    ...
}
template <class T> void Queue<T>::enqueue(T next){
    ...
}
template <class T> T Queue<T>::dequeue(){
    ...
}
template <class T> bool Queue<T>::is_empty(){
    ...
}
template <class T> bool Queue<T>::is_full(){
    ... …
Run Code Online (Sandbox Code Playgroud)

c++ templates class

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

分段错误取决于字符串长度?

我正在编写一个程序,它将使用getline读取来自infile的行,将字符串转换为包含字符串的前m个非空白字符的c-strings,然后将c-string连接成一个char数组.

示例文件可能如下所示:

5    //number of rows and columns in a grid
2    //number of grids
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX

XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
Run Code Online (Sandbox Code Playgroud)

所以我最终会得到一个2x5x5字符的char数组. 现在的问题是我的代码在上面显示的较小的测试用例上运行良好,但是当我在更大的网格(即100x100x100)上尝试它时,分段出现故障.

#include <iostream>
#include <string>
using namespace std;
int main(){
  int mapsize,levels;
  cin>>mapsize;
  cin>>levels;
  char map[mapsize*mapsize*levels];
  string input;
  for (int i=0;i<levels;i++){
    for (int j=0;j<mapsize;j++){
      getline(cin,input);
      char *row;
      row=new char[input.size()+1];
      strcpy(row, input.c_str());
      for (int k=0;k<mapsize;k++){
        map[i*mapsize*mapsize+j*mapsize+k]=row[k];
      }
      delete [] row;
    }
  }
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我用一个infile来调用这个程序:./ program#infile.in

我用gdb运行它并做了回溯.它始终指向"字符串输入"行;

我有什么想法可以解决这个段错误?谢谢

c++ arrays string getline segmentation-fault

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

如何增长一个动态的char指针数组(在C++中)?

我正在尝试使用一系列char指针.
假设我动态地声明这样的数组:

int numrows=100;  
char** array = new char*[numrows];  
Run Code Online (Sandbox Code Playgroud)

然后我通过使用getline从文件中获取字符串,将字符串转换为char数组,然后在我的数组中设置指针指向所述char数组来填充它,如下所示:

string entry;  
int i=0;
while (getline(file,entry)){  
  char* cstring = new char[entry.length()];  
  array[i]=strncpy(cstring,entry.c_str(),entry.length());  
  free(cstring);  
  i++;  
}
Run Code Online (Sandbox Code Playgroud)

(这有效,但是有更好的方法吗?)
问题是,一旦我变得大于numrows,我不知道如何增长数组.我知道如何为一维数组做这个,但是二维性让我失望.

我想我应该能够像增长一维阵列一样成长它,对吗?

if (i==numrows){  
  char** temp = new char*[numrows+numrows];  
  for (int j=0;j<i;j++){  
    char* cstring = new char[strlen(array[i])];  
    temp[i]=strncpy(cstrin,array[i],strlen(array[i]));  
    free(cstring);
  }
  delete [] array;
  array = temp;
}
Run Code Online (Sandbox Code Playgroud)

因此,如果当前数组变满,则创建第二个数组,该数组的大小是当前数组的两倍,并用当前数组的内容填充它.然后删除数组,让数组指向temp.我很高兴让temp成为新阵列.我可以将数组的内容转换为temp,但是当我删除数组并设置array = temp时,数组的内容不是temp的内容.

所以我的问题是我怎样才能/应该发展这个动态数组的char指针?

c++ pointers dynamic char

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