我正在尝试从文件中读取整数,对它们应用一些操作并将这些结果整数写入另一个文件。
// Input
FileReader fr = new FileReader("test.txt");
BufferedReader br = new BufferedReader(fr);
Scanner s = new Scanner(br);
// Output
FileWriter fw = new FileWriter("out.txt");
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
int i;
while(s.hasNextInt())
{
i = s.nextInt();
pw.println(i+5);
}
Run Code Online (Sandbox Code Playgroud)
我想问一下,像这样包装这些输入和输出流是一个好习惯吗?
我是 Java 和互联网的新手,我在文件中看到了很多其他的 I/O 方式。我想坚持一种方法,所以是最好的方法吗?
在K&P的Unix编程环境中,写道:
"管道中的程序实际上是在同一时间运行,而不是一个接一个地运行.
这意味着管道中的程序可以是交互式的;"
程序如何同时运行?
例如:$ who | grep mary | wc -l
grep mary将如何执行,直到谁运行或如何执行wc -l直到它知道以前程序的结果?
我有两个类A
(基础)和B
(派生自A
):
class A { };
class B : public A
{
int data;
public:
int get_data() { return data; }
};
Run Code Online (Sandbox Code Playgroud)
现在我有一个函数测试,它接受基类指针并调用派生类函数:
void test(A * ptr)
{
ptr->get_data();
}
Run Code Online (Sandbox Code Playgroud)
但问题ptr
可能是指A
对象或B
对象.如果它指向B
的是对象,那么确定,但如果A
是对象,那么这是一个问题.
而且,我不想get_data()
虚拟,因为data
它不是A
对象的属性.
如何检查ptr
点是否B
对象?我能想到的一个解决方案是dynamic_cast
检查它NULL
.它是最好的解决方案还是我能有更好的解决方案?
在以下代码中,
#include<stdio.h>
int main()
{
short a[2]={5,10};
short *p=&a[1];
short *dp=&p;
printf("%p\n",p);
printf("%p\n",p+1);
printf("%p\n",dp);
printf("%p\n",dp+1);
}
Run Code Online (Sandbox Code Playgroud)
现在我得到的输出是:0xbfb45e0a
0xbfb45e0c
0xbfb45e04
0xbfb45e06
在这里我理解p和p + 1,但是当我们做dp + 1时,那么因为dp指向short指针,并且因为指向short的指针大小为4个字节,所以dp + 1应该增加4个单位但是它
会增加只有2.
请解释原因.
我想在大学的最后一年做项目.
所以有人建议我在C中制作远程桌面.
现在我知道C中Windows的基本套接字功能,即我知道如何在C中制作
echo服务器.
但我不知道接下来该做什么.我在互联网上搜索但找不到
有用的信息.
有人可以建议我如何从这一点接近......任何教程......或任何来源?
由于 sizeof 运算符评估操作数是否为 VLA,因此我尝试将其测试为:
#include<stdio.h>
int main(void)
{
int sz=20,i=0,j=0;
int arr[sz];
printf("%d\n",sizeof((++i,sz)));
printf("%d\n",sizeof((++j,arr)));
printf("%d\n%d\n",i,j);
}
Run Code Online (Sandbox Code Playgroud)
我认为我不会增加,因为 sz 不是 VLA,但 j 会增加,因为 arr 是 VLA。
但是在输出中, i 和 j 都没有增加。
我正在尝试用 C++ 编写一个 set 的打印函数,这就是我写的:
void print_set(set<int> &s)
{
cout<<"{";
for(auto it = s.begin() ; it!=s.end() ; ++it)
{
cout<<*it;
if(it!=(s.end()-1)) //shows error here
cout<<",";
}
cout<<"}";
}
Run Code Online (Sandbox Code Playgroud)
但我收到错误。如何检查当前元素是否是最后一个元素?
我有以下矩阵:
X=1 2 3
Y=4 5 6
A=1 2 3
4 5 6
7 8 9
Run Code Online (Sandbox Code Playgroud)
我想要做
for each (i,j) in A
v = A(i,j)*X - Y
B(i,j) = v * v'
Run Code Online (Sandbox Code Playgroud)
即A的每个元素乘以向量X,然后结果向量从自身中减去Y,最后我们取该向量的内积来得到一个数.
可以不用for循环吗?
我有一组整数对,我想打印它,所以我重载了<<运算符的set和pair类:
template<typename T, typename U>
inline ostream& operator<<(ostream& os, pair<T,U> &p){
os<<"("<<p.first<<","<<p.second<<")";
return os;
}
template<typename T>
inline ostream& operator<<(ostream& os, set<T> &s){
os<<"{";
for(auto it = s.begin() ; it != s.end() ; it++){
if(it != s.begin())
os<<",";
os<<*it;
}
os<<"}";
return os;
}
Run Code Online (Sandbox Code Playgroud)
当我创建一个集合并输出它时
set<pair<int,int>> s;
cout<<s<<endl;
Run Code Online (Sandbox Code Playgroud)
它给出了错误:
cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’
os<<*it;
Run Code Online (Sandbox Code Playgroud)
和
initializing argument 1 of ‘std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = std::pair<int, int>]’ …
Run Code Online (Sandbox Code Playgroud) 我有一对int的向量,我想添加每对的所有第一个元素.我写了以下代码
#include <iostream>
#include <numeric>
#include <vector>
#include <utility>
#define PII pair<int,int>
using namespace std;
int main() {
vector<pair<int,int>> v;
v.push_back(PII(1,2));
v.push_back(PII(3,4));
v.push_back(PII(5,6));
cout<<accumulate(v.begin(),v.end(),0,[](auto &a, auto &b){return a.first+b.first;});
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这里给出了错误http://ideone.com/Kf2i7d.要求的答案是1 + 3 + 5 = 9.我无法理解它给出的错误.