我有以下代码将我的std::cout输出重定向到日志文件.
std::ofstream out("out.txt");
std::streambuf *coutbuf = std::cout.rdbuf(); //save old buf
std::cout.rdbuf(out.rdbuf()); //redirect std::cout to out.txt!
Run Code Online (Sandbox Code Playgroud)
现在我想要的是,每当发生换行时,当前时间戳将被写入文件.
我知道我可以用以下方法实现:
std::cout << getTime() << "printing data" << std::endl;
Run Code Online (Sandbox Code Playgroud)
但我想要的是以std::cout某种方式自动处理它.那可能吗?
我正在寻找一个容器std::queue,它会在最后添加元素(例如,带有字段id类型的自定义类uint),但前提是该对象不在容器内.
我的类的两个元素只有在相等时才被认为id是相等的(我有重载运算符==).
这样的容器是存在于C++ 11中还是存在于Boost中?
一个是模板类的成员函数std::atomic,一个是模板函数,似乎它们做同样的事情.作为std一个类库,为什么它同时提供class和none-class版本,我认为同样的操作?
它们之间有什么真正的区别吗?
直接问题:
这段代码,
#include <iostream>
using namespace std;
int main() {
std::string string = "9 9";
std::cout << string;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
9 9作为输出返回.
但是,在输入9 9此代码时,
#include <iostream>
using namespace std;
int main() {
std::string string;
std::cin >> string;
std::cout << string;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它输出9.为什么会这样?
我想这与空间有关,但有什么办法可以避免这种情况吗?我必须说空间是数字之间唯一有效的分离.
我正在尝试使用C++ 11标准,并提出了这个问题:
在C++ 11可以使用auto并decltype自动获取返回类型的函数,例如begin()和end()功能如下:
#include <vector>
template <typename T>
class Container {
private:
std::vector<T> v;
public:
auto begin() -> decltype(v.begin()) { return v.begin(); };
auto end() -> decltype(v.end()) { return v.end(); };
};
Run Code Online (Sandbox Code Playgroud)
我的问题是我必须在公共声明vector<T> v 之前声明私有,这违反了我的编码风格.我想在公众成员之后宣布我的所有私人会员.您必须在函数声明之前声明向量,因为表达式in decltype是对向量成员函数的调用,begin()并且需要对象的实例.
有没有解决的办法?
据我所知,C++总是在条件语句中从左到右进行求值
if(A, B, C)
Run Code Online (Sandbox Code Playgroud)
A将被评估第一,B第二,等等.但是,以下示例表现出一些奇怪的行为.
#include <iostream>
#include <map>
#include <memory>
#include <vector>
#include <boost/logic/tribool.hpp>
//-////////////////////////////////////////////
// File Block
class FileBlock {
public:
FileBlock();
virtual ~FileBlock();
bool linked();
std::vector<int> messages_;
private:
boost::logic::tribool position_;
std::shared_ptr<FileBlock> precedingBlock_ = nullptr;
std::shared_ptr<FileBlock> followingBlock_ = nullptr;
};
FileBlock::FileBlock() {
std::cout << "Breakpoint." << std::endl;
// "linked()" evaluated first by scope.
if(linked()) {
if(!position_
&& precedingBlock_->messages_.back() > 1) {
std::cout << "Unreachable." << std::endl;
}
}
// "linked()" evaluated first without the tribool. …Run Code Online (Sandbox Code Playgroud) 我正在实现一个像这样工作的软件:
我有一台运行vt100终端应用程序的Linux服务器输出文本.我的程序telnet服务器并读取/解析文本的位到相关数据.相关数据被发送到由Web服务器运行的小客户端,该Web服务器在HTML页面上输出数据.
我的问题是某些特殊字符如"åäö"被输出为问号(经典).
背景:
我的程序使用Apache Commons TelnetClient读取字节流.字节流被转换为字符串,然后相关的位被子字符串,并返回到分隔符字符.在此之后,新字符串将转换回字节数组,并使用Socket发送到Web服务器运行的客户端.此客户端根据接收的字节创建一个字符串,并将其打印在标准输出上,Web服务器从中读取并输出HTML.
第1步:byte [] - > String - > byte [] - > [发送到客户端]
Step2:byte [] - > String - > [print output]
问题:
当我在Windows上运行我的Java程序时,所有字符(包括"åäö")都会在生成的HTML页面上正确输出.但是,如果我在Linux上运行程序,所有特殊字符都会转换为" ? "(问号).
Web服务器和客户端当前正在Windows上运行(步骤2).
代码:
程序基本上是这样的:
我的节目:
byte[] data = telnetClient.readData() // Assume method works and returns a byte[] array of text.
// I have my reasons to append the characters one at a time using a StringBuffer.
StringBuffer buf = new StringBuffer();
for (byte b : …Run Code Online (Sandbox Code Playgroud) 我试图理解C++中的继承.
我想在派生类中动态创建一个数组,并将数组指针传递给基类,然后基类填充数组.最后,我想从派生类中打印数组.
我写了下面的代码,但是当我运行它时,程序崩溃了,我得到了一个分段错误错误.
我应该如何实现这个?!
class Base {
private:
int* array;
public:
Base(int* a) {
array = a;
for(int i = 0 ; i < 10 ; i++) {
array[i] = i;
}
}
};
class Child : public Base {
private:
int* array;
public:
Child() : array(new int[10]), Base(array) {}
void print() {
for(int i = 0 ; i < 10 ; i++) {
cout << array[i] << endl;
}
}
};
Run Code Online (Sandbox Code Playgroud) 问题是,我必须以方便的格式以毫秒为单位获取当前时间.
期望输出的示例:
21小时04分12秒512毫秒
我知道如何在几秒钟内获得这种格式,但我不知道如何让我的手在几毫秒?
我想创建一个特定对象的动态数组,该数组也支持向数组添加新对象.
我正在努力解决这个问题,作为我课程练习的一部分.在本练习中,我们不应该使用std::vector.
例如,假设我有一个名为class的类Product并声明一个指针:
Products* products;
Run Code Online (Sandbox Code Playgroud)
那么我想支持以下内容:
products = new Product();
/* code here... */
products[1] = new Product(); // and so on...
Run Code Online (Sandbox Code Playgroud)
我知道当前的语法可能会导致访问冲突.我不提前知道数组的大小,因为它可以在整个程序中改变.
问题是:
如何在没有载体的情况下编写它?
我必须使用双指针(二维)吗?
每次我想添加一个新对象时,是否必须将数组复制到新数组(大小为+1),然后删除该数组?