可能重复:
如何创建向量矢量的笛卡尔积?
我有一些逻辑问题,想出如何在二维矢量中生成元素的所有组合.在这里,我创建了一个2D矢量.两个维度的大小都不能假设.
#include <iostream>
#include <vector>
using namespace std;
int main() {
srand(time(NULL));
vector< vector<int> > array;
// This creates the following:
// array[0]: {0, 1, 2}
// array[1]: {3, 4, 5, 9}
// array[2]: {6, 7, 8}
for(int i=0; i<3; i++) {
vector<int> tmp;
tmp.push_back((i*3)+0); tmp.push_back((i*3)+1); tmp.push_back((i*3)+2);
if(i==1)
tmp.push_back((i*3)+6);
array.push_back(tmp);
}
}
Run Code Online (Sandbox Code Playgroud)
创建向量后,我想输出所有可能的组合,如下所示:
comb[0] = {0, 3, 6}
comb[1] = {0, 3, 7}
comb[2] = {0, 3, 8}
comb[3] = {0, 4, 6}
comb[4] = {0, 4, 7} …
Run Code Online (Sandbox Code Playgroud) 我试图在嵌入式 ARM 设备上使用 gettimeofday,但似乎我无法使用它:
gnychis@ubuntu:~/Documents/coexisyst/econotag_firmware$ make
Building for board: redbee-econotag
CC obj_redbee-econotag/econotag_coexisyst_firmware.o
LINK (romvars) econotag_coexisyst_firmware_redbee-econotag.elf
/home/gnychis/Documents/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none- eabi/4.3.2/../../../../arm-none-eabi/lib/libc.a(lib_a-gettimeofdayr.o): In function `_gettimeofday_r':
gettimeofdayr.c:(.text+0x1c): undefined reference to `_gettimeofday'
/home/gnychis/Documents/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-eabi/4.3.2/../../../../arm-none-eabi/lib/libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
sbrkr.c:(.text+0x18): undefined reference to `_sbrk'
collect2: ld returned 1 exit status
make[1]: *** [econotag_coexisyst_firmware_redbee-econotag.elf] Error 1
make: *** [mc1322x-default] Error 2
Run Code Online (Sandbox Code Playgroud)
我假设我不能使用 gettimeofday() ?有没有人有任何建议能够告诉经过的时间?(例如,100 毫秒)
我试图交叉编译的Android一个非常简单的程序,工作有Android NDK-R 6b和R之前,但并没有对Android的NDK-R7和新的工作:
int main() {
;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我可以在旧版Android上使用"agcc"脚本来实现,可以在这里找到.我真诚地不想使用Android.mk文件来构建它.我知道我可以,但这是我正在努力的更大的事情的一部分.所以把它作为面值,我试图以不同的方式交叉编译它.
无论如何,我尝试构建并得到:
$ arm-eabi-gcc -o test test.c
/home/gnychis/Documents/android/os/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/../lib/gcc/arm-eabi/4.4.3/../../../../arm-eabi/bin/ld: warning: /tmp/cc00QD3x.o uses variable-size enums yet the output is to use 32-bit enums; use of enum values across objects may fail
/tmp/cc00QD3x.o:(.ARM.exidx.text.main+0x0): undefined reference to `__aeabi_unwind_cpp_pr0'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
因此,关键错误是对__aeabi_unwind_cpp_pr0的未定义引用.
在做了一些挖掘之后,这个符号在libgcc.a中,我链接到:
$ arm-eabi-nm /home/gnychis/Documents/android/os/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/lib/gcc/arm-eabi/4.4.3/libgcc.a | grep __aeabi_unwind_cpp_pr0
U __aeabi_unwind_cpp_pr0
U __aeabi_unwind_cpp_pr0
U __aeabi_unwind_cpp_pr0
U __aeabi_unwind_cpp_pr0
U __aeabi_unwind_cpp_pr0
U __aeabi_unwind_cpp_pr0
U __aeabi_unwind_cpp_pr0
00000590 T …
Run Code Online (Sandbox Code Playgroud) 我在Python中反复使用的一个非常常见的句子感觉"太长了",我希望有更多的Pythonic方法来编写它:
a = b if a is None else a
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来写这个?
我知道每当垃圾收集器收集一个类实例时都会调用finalize().但是,当通过队列将类的实例传递给另一个线程时,我有点困惑.
假设这是Thread1的骨架:
for(i=0; i<1000; i++) {
Packet pkt = new Packet(); // instance of class
pkt.id = i;
thread2.queue.put(pkt);
}
Run Code Online (Sandbox Code Playgroud)
然后,线程2将从队列中删除数据包并执行冗长的操作.这第二个线程是否获得了数据包的"副本",还是通过某种形式的引用?重要的是,如果是通过复制,则可以在线程2完成数据包之前调用在线程1中创建的实例上的finalize().如果是引用,我保证只对包中的信息调用finalize()一次.
这个基本示例可能没有显示重要性,但是我在数据包中存储了一个C指针(来自JNI)以在完成对象时销毁一些内存.如果它是通过副本传递的,则内存可能会在第二个线程完成之前被销毁.如果它是通过引用传递的,那么它应该只在GC看到它不再被两个线程使用时被销毁(我想要的行为).如果后一种情况得不到保证,我不会使用finalize()并使用其他东西,但会更复杂.
我正在尝试调试使用本机C代码的Android应用程序.我能够设置GDB并获得我的segfaulting的堆栈跟踪.我理解堆栈跟踪直到最顶层的项目:
#0 0x00000000 in ?? ()
#1 0x84601920 in fvalue_set (fv=0xe262c0, value=0x494530cc, already_copied=0) at ftypes.c:422
#2 0x845eaae8 in proto_tree_new_item (new_fi=0xe262c0, tree=<value optimized out>, tvb=0xe29080, start=14, length=11, encoding_arg=0) at proto.c:1429
#3 0x845eb2f8 in proto_tree_add_item (tree=<value optimized out>, hfindex=<value optimized out>, tvb=0xe29080, start=14, length=11, encoding=0) at proto.c:1760
#4 0x84a163dc in add_tagged_field (pinfo=<value optimized out>, tree=0xe245b8, tvb=0xe29080, offset=<value optimized out>) at packet-ieee80211.c:6272
#5 0x84a18e74 in ieee_80211_add_tagged_parameters (tvb=0xe29080, offset=12, pinfo=0x10f8978, tree=0xe24588, tagged_parameters_len=190) at packet-ieee80211.c:7914
#6 0x84a19094 in dissect_ieee80211_mgt (fcf=<value optimized out>, tvb=0xe29080, pinfo=0x10f8978, tree=0xe21dc0) …
Run Code Online (Sandbox Code Playgroud) 我正在努力将libbtbb交叉编译到Android,我收到大量警告说:
jni/libbtbb/bluetooth_packet.h:67: warning: integer constant is too large for 'long' type
Run Code Online (Sandbox Code Playgroud)
但是,当我深入研究文件时,这指向了这一行:
static const uint64_t sw_matrix[] = {
0xfe000002a0d1c014, 0x01000003f0b9201f, 0x008000033ae40edb, 0x004000035fca99b9,
0x002000036d5dd208, 0x00100001b6aee904, 0x00080000db577482, 0x000400006dabba41,
0x00020002f46d43f4, 0x000100017a36a1fa, 0x00008000bd1b50fd, 0x000040029c3536aa,
0x000020014e1a9b55, 0x0000100265b5d37e, 0x0000080132dae9bf, 0x000004025bd5ea0b,
0x00000203ef526bd1, 0x000001033511ab3c, 0x000000819a88d59e, 0x00000040cd446acf,
0x00000022a41aabb3, 0x0000001390b5cb0d, 0x0000000b0ae27b52, 0x0000000585713da9};
Run Code Online (Sandbox Code Playgroud)
类型是uint64_t,而不是"long"......但它似乎指的是指定常量,如0xfe000002a0d1c014.在这种情况下,我不确定应该如何指定它,或者我是否可以忽略这些警告.
我有一个抽象方法作为抽象类的一部分,具有以下声明:
abstract public ArrayList<Device> returnDevices(ArrayList<Object> scanResult);
Run Code Online (Sandbox Code Playgroud)
我希望传递的参数是一个ArrayList,但ArrayList中的类型对象将依赖于继承此超类并实现方法returnDevices的子类.
我认为我可以通过如上所述使方法抽象来实现这一点,然后在继承它的子类中执行以下操作:
public ArrayList<Device> returnDevices(ArrayList<Object> scanResult) {
Iterator<Object> results = scanResult.iterator();
while(results.hasNext())
Packet pkt = (Packet) results.next(); // HERE: I cast the Object
}
Run Code Online (Sandbox Code Playgroud)
这很好,不会导致错误,但是当我尝试使用类型的参数调用returnDevices时ArrayList<Packet>
,如下所示:
ArrayList<Packet> packets = new ArrayList<Packet>();
// <----- the "packets" ArrayList is filled here
ArrayList<Device> devices = returnDevices(packets);
Run Code Online (Sandbox Code Playgroud)
......我收到错误:
The method returnDevices(ArrayList<Object>) in the type ScanResultParser is not applicable for the arguments (ArrayList<Packet>)
Run Code Online (Sandbox Code Playgroud)
很明显它拒绝参数类型.实现我想做的事情的正确方法是什么?
我正在尝试使用crosstool-ng及其生成的编译器为ARM处理器交叉编译zlib arm-linux-gnueabihf-gcc
。我将CC
变量设置为使用交叉编译器以及AR
和RANLIB
,然后./configure
按如下所示运行它们:
CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar RANLIB=arm-linux-gnueabihf-ranlib LDSHARED="arm-linux-gnueabihf-gcc -shared -Wl,-soname,libz.so.1" ./configure --shared --prefix=/usr
Run Code Online (Sandbox Code Playgroud)
问题是它吐出了一个Makefile
没有AR
设置的变量,而是AR
设置为libtool,该变量用于我的本机Mac计算机。这是Makefile设置的内容:
AR=libtool
ARFLAGS=-o
RANLIB=ranlib
Run Code Online (Sandbox Code Playgroud)
我可以手动编辑Makefile并进行更改AR=arm-linux-gnueabihf-ar
,ARFLAGS=rcs
从而修复了构建问题。但这对我来说是一个hack。这是配置脚本:
有人看到我运行configure命令的方式有问题吗?
我对代码第一实体框架数据库有点困惑.
我创建了一个新的DbContext和类,我将在该上下文中存储,如下所示:
namespace MyProject.Subproject.Something
{
public class MyItem
{
public string One { get; set; }
public string Two { get; set; }
[Key]
public string Three { get; set; }
public string Four { get; set; }
}
public class MyAppData : DbContext
{
public DbSet<MyItem> MyItems { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
我知道它有效,因为我能做到这一点而不会失败:
var db = new MyAppData();
MyItem i = new MyItem();
// ... fill in item
db.MyItems.Add(i);
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
此外,如果我重新启动应用程序,我发现db.MyItems.Count()
反映项目实际上是持久存储在某个地方.
我假设这是存储的,localdb
因为我没有设置SQL Server数据库.我想要做的就是在localdb …