C++ 处理数字的流对象
这可能是一个非常基本的问题,但在深入研究STL参考资料时,我找不到任何合适的方法。例如C++ 处理数字的流对象,c++,stl,stream,bytestream,C++,Stl,Stream,Bytestream,这可能是一个非常基本的问题,但在深入研究STL参考资料时,我找不到任何合适的方法。例如 std::ostringstream oss; oss << "One hundred and one: " << 101; 将导致字节或字符串缓冲区不包含10、0和15的文本表示,而只包含这三个数字 你知道这可以用什么吗?这个语义(流插入):不,没有 从您的示例来看,似乎希望用整数填充整数向量 您将需要一个函子(ostream操纵器),它将类似ostream的语义转换为向量元素加法
std::ostringstream oss;
oss << "One hundred and one: " << 101;
将导致字节或字符串缓冲区不包含10
、0
和15
的文本表示,而只包含这三个数字
你知道这可以用什么吗?这个语义(流插入):不,没有
从您的示例来看,似乎希望用整数填充整数向量
您将需要一个函子(ostream操纵器),它将类似ostream的语义转换为向量元素加法
大致如下:
struct functor {
functor(std::vector<int>& viref):
myVector(viref)
{}
// this operator overload translates stream-insert operator
// into vector element addition
functor& operator<<(const int i) {
myVector.push_back(i);
return *this;
}
std::vector<int>& myVector;
};
int main() {
std::vector<int> vi;
functor f( vi );
f << 1 << 2 << 3;
}
结构函子{
函子(std::vector和viref):
myVector(viref)
{}
//此运算符重载转换流插入运算符
//矢量元素加法
函子和运算符包含整数序列的缓冲区就是
std::vector
控制
您可以覆盖全局运算符
听起来像是可以先使用vector
存储数据。有关允许速记插入向量的库,请参阅。您到底为什么要这样做?
struct functor {
functor(std::vector<int>& viref):
myVector(viref)
{}
// this operator overload translates stream-insert operator
// into vector element addition
functor& operator<<(const int i) {
myVector.push_back(i);
return *this;
}
std::vector<int>& myVector;
};
int main() {
std::vector<int> vi;
functor f( vi );
f << 1 << 2 << 3;
}
#include <vector>
#include <iostream>
std::vector<int> & operator<<(std::vector<int> & vi, int i)
{
vi.push_back(i);
return vi;
}
int main()
{
std::vector<int> vi;
vi << 1 << 2 << 3;
for(auto i : vi) {
std::cout << i << std::endl;
}
return 0;
}
si.push_back(i);
si.push_back(i);
si.push_back(j);
si.push_back(k);
si << i << j << k;
void push_back(std::vector<int> & vi){}
template<typename ...Ts>
void push_back(std::vector<int> & vi, int i, Ts... ts)
{
vi.push_back(i);
if (sizeof...(Ts)) {
push_back(vi,ts...);
}
}
push_back(si,i,j,k);
si << i << j << k;