小编Hap*_*tal的帖子

Java 文件 I/O 的良好实践

我正在尝试从文件中读取整数,对它们应用一些操作并将这些结果整数写入另一个文件。

// 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 方式。我想坚持一种方法,所以是最好的方法吗?

java file-io filewriter bufferedwriter printwriter

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

在UNIX中管道存疑

在K&P的Unix编程环境中,写道:
"管道中的程序实际上是在同一时间运行,而不是一个接一个地运行.
这意味着管道中的程序可以是交互式的;"

程序如何同时运行?
例如:$ who | grep mary | wc -l
grep mary将如何执行,直到谁运行或如何执行wc -l直到它知道以前程序的结果?

unix piping

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

创建函数获取基类指针但调用派生类函数

我有两个类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.它是最好的解决方案还是我能有更好的解决方案?

c++ inheritance

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

向指针添加整数

在以下代码中,

#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.
请解释原因.

pointers integer addition

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

C中的远程桌面项目

我想在大学的最后一年做项目.
所以有人建议我在C中制作远程桌面.
现在我知道C中Windows的基本套接字功能,即我知道如何在C中制作
echo服务器.
但我不知道接下来该做什么.我在互联网上搜索但找不到
有用的信息.
有人可以建议我如何从这一点接近......任何教程......或任何来源?

c rdp remote-desktop

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

在 sizeof 运算符中评估操作数

由于 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 sizeof

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

检查当前元素是否是集合的最后一个元素

我正在尝试用 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)

但我收到错误。如何检查当前元素是否是最后一个元素?

c++ iterator stl

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

Matlab Vectorization:如何避免这种"for"循环?

我有以下矩阵:

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循环吗?

matlab vectorization

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

重载operator << for set

我有一组整数对,我想打印它,所以我重载了<<运算符的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)

c++ vector operator-overloading set

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

C++添加对列表的元素

我有一对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.我无法理解它给出的错误.

c++ stl vector

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