我正在运行一个程序并重定向cout到一个outfile,如下所示:
./program < infile.in > outfile.o
Run Code Online (Sandbox Code Playgroud)
我希望能够从命令行读取选项('-h'或'--help')并向终端输出帮助消息.有没有办法可以做到这一点,但仍然有cout其他程序的常规转到outfile?
将cout要使用这样的事情合适的对象?
我需要推导出这个表达式的Big-O复杂性:
c ^ n + n*(log(n))^ 2 +(10*n)^ c
其中c是常数,n是变量.
我很确定我理解如何单独推导每个术语的Big-O复杂性,我只是不知道当这些术语组合时Big-O复杂性如何变化.
想法?
任何帮助都会很棒,谢谢.
好的,我正在尝试实现一个名为Queue的基于数组的队列的模板化类.这就是我做到的.首先,这是实现模板类的正确方法吗?问题是,当我尝试编译时,我收到错误消息
未定义引用'Queue :: Queue()'
未定义引用'Queue :: ~Queue()'
有什么想法有什么不对吗?我声明错误或执行错误吗?
#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)
#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) 我正在编写一个程序,它将使用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运行它并做了回溯.它始终指向"字符串输入"行;
我有什么想法可以解决这个段错误?谢谢
我正在尝试使用一系列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指针?