我们假设我有一个这样的结构:
struct my_struct
{
int a;
int b;
}
Run Code Online (Sandbox Code Playgroud)
我有一个函数应该为"a"或"b"设置一个新值.此函数还需要指定要设置的变量.一个典型的例子是这样的:
void f(int which, my_struct* s, int new_value)
{
if(which == 0)
s->a = new_value;
else
s->b = new_value;
}
Run Code Online (Sandbox Code Playgroud)
由于我不会在这里写的原因,我无法将指针传递给a/b到f.所以我不能用my_struct :: a或my_struct :: b的地址调用f.我不能做的另一件事是在my_struct中声明一个向量(int vars [2])并将一个整数作为索引传递给f.基本上在f中我需要按名称访问变量.
以前的例子的问题是,在将来我计划向struct添加更多变量,在这种情况下,我将记得向f添加更多if语句,这对于可移植性是不利的.我能做的就是将f写为宏,如下所示:
#define FUNC(which)
void f(my_struct* s, int new_value) \
{ \
s->which = new_value; \
}
Run Code Online (Sandbox Code Playgroud)
然后我可以调用FUNC(a)或FUNC(b).
这可行,但我不喜欢使用宏.所以我的问题是:有没有办法使用模板而不是宏来实现相同的目标?
编辑:我将尝试解释为什么我不能使用指针,我需要按名称访问变量.基本上,结构包含系统的状态.该系统需要在请求时"撤消"其状态.使用名为undo_token的接口处理撤消,如下所示:
class undo_token
{
public:
void undo(my_struct* s) = 0;
};
Run Code Online (Sandbox Code Playgroud)
因此,由于多态性,我无法将指针传递给undo方法(mystruct也包含其他类型的变量).
当我向结构中添加一个新变量时,我通常还会添加一个新类,如下所示:
class undo_a : public undo_token
{
int new_value;
public:
undo_a(int new_value) { …Run Code Online (Sandbox Code Playgroud) 如何以插入顺序存储集合中的元素.例如.
set<string>myset;
myset.insert("stack");
myset.insert("overflow");
Run Code Online (Sandbox Code Playgroud)
如果你打印,输出是
overflow
stack
Run Code Online (Sandbox Code Playgroud)
需要的输出:
stack
overflow
Run Code Online (Sandbox Code Playgroud) 我接触到了一个新功能,因为java-9被称为Collectors.flatMapping分组或分区的下游.如(例子来自这里):
List<List<Integer>> list = Arrays.asList(
Arrays.asList(1, 2, 3, 4, 5, 6),
Arrays.asList(7, 8, 9, 10));
Map<Integer, List<Integer>> map =list.stream()
.collect(Collectors.groupingBy(
Collection::size,
Collectors.flatMapping(
l -> l.stream().filter(i -> i % 2 == 0),
Collectors.toList())));
Run Code Online (Sandbox Code Playgroud)
{4 = [8,10],6 = [2,4,6]}
这是一个相当优雅的方式,只使用3个收藏家.我需要在java-8中重写收集器,但尚不支持.我尝试使用6种收集器,这种收集器使用起来 非常广泛,我无法找到使用较少的收集器的方法:
Map<Integer, List<Integer>> map = list.stream()
.collect(Collectors.groupingBy(
Collection::size,
Collectors.collectingAndThen(
Collectors.mapping(
l -> l.stream().filter(i -> i % 2 == 0).collect(Collectors.toList()),
Collectors.toList()),
i -> i.stream().flatMap(j -> j.stream()).collect(Collectors.toList()))));
Run Code Online (Sandbox Code Playgroud)
是否有一个更短的仅使用更好的方法的Java-8 ?
在我的Linux系统中,临时端口范围显示不同的范围,如下所示
$ cat /proc/sys/net/ipv4/ip_local_port_range
32768 61000
Run Code Online (Sandbox Code Playgroud)
?
cat /etc/sysctl.conf | grep net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 9000 65500
Run Code Online (Sandbox Code Playgroud)
在我的系统中,哪个临时端口有效?
有一件事std::thread我不明白:为什么构造std::thread函数的函数由rvalue运行?
我通常想要将一些成员的Functor运行到另一个线程.像这样:
struct Function
{
void operator() ( /* some args */)
{
/* some code */
}
/* some members */
}
void run_thread()
{
Functor f( /* some data */);
std::thread thread(f, /* some data */);
/* do something and wait for thread to finish */
}
Run Code Online (Sandbox Code Playgroud)
对于当前的实现,std::thread我必须确保我的对象正在实现移动语义.我不明白为什么我不能通过引用传递它.
额外的问题是:通过rvalue引用函数意味着什么?Lambda表达?
我正在使用张量流版本:
0.12.1
Cuda工具集版本是8.
lrwxrwxrwx 1 root root 19 May 28 17:27 cuda -> /usr/local/cuda-8.0
Run Code Online (Sandbox Code Playgroud)
如此处所述 ,我已经下载并安装了cuDNN.但是从我的python脚本执行以下行时,我收到标题中提到的错误消息:
model.fit_generator(train_generator,
steps_per_epoch= len(train_samples),
validation_data=validation_generator,
validation_steps=len(validation_samples),
epochs=9)
Run Code Online (Sandbox Code Playgroud)
详细错误消息如下:
Using TensorFlow backend.
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcurand.so locally
Epoch 1/9 Exception in thread Thread-1: Traceback (most recent call last): File " …Run Code Online (Sandbox Code Playgroud) 我有一个流MetricGroup,其中:
public class MetricGroup {
private int uploadedDocs;
private long uploadedKbs;
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
我需要在一个指标中对所有指标进行sumarize.我的意思是,我需要所有添加metric.uploadedDocs到sumMetric.uploadedDocs和metric.uploadedKds成sumMetric.uploadedKbs.
我想我需要某种东西 reduce
Stream.of(new MetricGroup(1,100), new MetricGroup(1,200))
.reduce(????);
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我一直在尝试使用Kubernetes在本地部署带有架构注册表的Kafka。但是,架构注册表窗格的日志显示此错误消息:
ERROR Server died unexpectedly: (io.confluent.kafka.schemaregistry.rest.SchemaRegistryMain:51)
org.apache.kafka.common.errors.TimeoutException: Timeout expired while fetching topic metadata
Run Code Online (Sandbox Code Playgroud)
这种行为的原因可能是什么?'为了在本地运行Kubernetes,我将Minikube v0.32.0版本与Kubernetes v1.13.0版本一起使用
我的Kafka配置:
apiVersion: v1
kind: Service
metadata:
name: kafka-1
spec:
ports:
- name: client
port: 9092
selector:
app: kafka
server-id: "1"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: kafka-1
spec:
selector:
matchLabels:
app: kafka
server-id: "1"
replicas: 1
template:
metadata:
labels:
app: kafka
server-id: "1"
spec:
volumes:
- name: kafka-data
emptyDir: {}
containers:
- name: server
image: confluent/kafka:0.10.0.0-cp1
env:
- name: KAFKA_ZOOKEEPER_CONNECT
value: zookeeper-1:2181
- …Run Code Online (Sandbox Code Playgroud) apache-kafka kubernetes apache-zookeeper confluent-schema-registry
我看到我的应用程序/平台内存利用率突然飙升.在GC详细日志中我看到如下:
1285.946:[GC 1285.946:[ ParNew(促销失败):353920K-> 353920K(353920K),0.8003983秒] 1286.747:[CMS1287.338:[CMS-con current-sweep:7.902/9.624 secs] [次:用户= 96.62 sys = 2.35,real = 9.62 secs](并发模式故障):2531317K-> 1161025K(2752512K),24.8330303 secs] 2860005K-> 1161025K(3106432K),[CMS Perm:37117K-> 3 6905K(62368K)],25.6341706 secs ] [时间:用户= 26.41 sys = 0.05,实际= 25.63秒] [POA RootPOA - 摆脱:17 oid:00 17 2E 29 23 33 49 34 25 3E opname:ping - 处理请求] 1312.367:[GC 1312.367:[ParNew] :314624K-> 30240K(353920K),0.0188874秒] 1475649K-> 1191266K(3106432K),0.0194380秒] [时间s:用户= 0.40 sys = 0.00,实际= 0.02秒] 1313.249:[GC 1313.249:[ParNew:344864K- > 39296K(353920K),0.0300220秒] 1505890K-> 1201198K(3106432K),0.0305488秒]
ParNew(促销失败),并发模式失败:请解释和如何解决这个问题.我相信由于GC故障,内存中突然出现峰值.
请求您的意见.
class P {
public:
explicit P( int a, int b, int c) {
std::cout<<"calling explicit constructor"<<"\n";
}
};
int main() {
P z {77,5,42}; // OK
P w = {77,5,42}; // ERROR due to explicit (no implicit type conversion allowed)
}
Run Code Online (Sandbox Code Playgroud)
我认为 {77,5,42}有隐式类型std::initialization_list<int>。如果是这种情况,是什么导致变量构造失败z?
c++ ×4
java ×3
c++11 ×2
java-8 ×2
java-stream ×2
apache-kafka ×1
collectors ×1
java-9 ×1
java-ee ×1
kubernetes ×1
linux ×1
memory ×1
networking ×1
python-3.x ×1
set ×1
stl ×1
templates ×1
tensorflow ×1
unix ×1
unix-socket ×1