问题列表 - 第5326页

如何从C++函数返回数百个值?

在C++中,每当函数创建许多(数百或数千)个值时,我曾经让调用者传递一个数组,然后我的函数用输出值填充:

void computeValues(int input, std::vector<int>& output);
Run Code Online (Sandbox Code Playgroud)

因此,该函数将output使用它计算的值填充向量.但这并不是真正优秀的C++风格,正如我现在意识到的那样.

以下函数签名更好,因为它不承诺使用a std::vector,但可以使用任何容器:

void computeValues(int input, std::insert_iterator<int> outputInserter);
Run Code Online (Sandbox Code Playgroud)

现在,来电者可以与一些人打电话inserter:

std::vector<int> values; // or could use deque, list, map, ...
computeValues(input, std::back_inserter(values));
Run Code Online (Sandbox Code Playgroud)

同样,我们不承诺std::vector专门使用,这很好,因为用户可能只需要std::set等等的值(我应该传递iteratorby值还是引用?)

我的问题是:这是insert_iterator正确的还是标准的方式吗?还是有更好的东西?

编辑:我编辑了这个问题,以明确我不是在谈论返回两个或三个值,而是数百或数千.(想象一下,您已经返回在某个目录中找到的所有文件,或图表中的所有边缘等)

c++ iterator stl vector return-value

4
推荐指数
2
解决办法
1897
查看次数

如何组织源代码文件?按功能还是输入?

在我早期的编码时代,我倾向于将以类似方式运作的类分组.例如:

  • 数据传输对象
    • 对象A.
    • 对象B.
  • 对话框
    • 对话A
    • 对话B

过了一会儿,它开始让我感到沮丧的是,当我在应用程序的某个特定部分工作时,我必须四处跳转才能把它拼凑起来.

在过去的几年里,我倾向于按功能组织事物.通常共享的类,例如数据库对象,我仍然保持在一起.我认为这对于像网站这样的东西更有意义:

  • 页面A.
    • 图片
    • 资源1
    • 对话1
  • 第B页
    • 图片
    • 资源2
    • 对话2

这是最好的方法吗?有没有人有一个很好的经验法则可以遵循?

language-agnostic

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

有没有办法在IE的输入框中获取所选文本的偏移量?

在Firefox中,您只需调用:

myInputTextField.selectionStart或myInputTextField.selectionEnd

获取输入框中所选文本的第一个和最后一个索引.

在IE中,我知道你可以调用document.selection.createRange()来调整选择.然而,对于我的生活,我没有找到任何代表选择中的字符偏移的值.

我错过了什么吗?有没有办法在IE中获得相同的价值?

谢谢!

亚历克斯

html javascript internet-explorer web-applications

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

WYSIWYG富文本编辑器,支持差异?

我的Web应用程序类似于StackOverflow,因为不同的用户经常编辑相同的文本块.

目前我们只支持纯文本,因此很容易向用户显示文本在编辑之间的变化情况.

我想在这些字段中支持富文本,但我的用户是非技术性的,因此任何类型的标记都不是一种选择.

有没有支持差异的基于javascript的富文本编辑器?理想情况下,差异也是富文本格式,但如果需要,它们可以用降价或类似方式呈现(我想不惜一切代价避免使用原始HTML).

javascript diff richtextbox

5
推荐指数
0
解决办法
1414
查看次数

如何实现最近使用的缓存

实现最近使用的对象缓存的最佳方法是什么?

以下是要求和限制......

  • 对象存储为键/值对象/对象对,因此接口有点像Hashtable get/put
  • 对"get"的调用会将该对象标记为最近使用的对象.
  • 在任何时候,可以从缓存中清除最近最少使用的对象.
  • 查找和清除必须快速(如在快速哈希表中)
  • 对象的数量可能很大,因此列表查找不够好.
  • 必须使用JavaME进行实现,因此使用标准Java库中的第三方代码或整齐的库类几乎没有空间.出于这个原因,我正在寻找更多的算法答案而不是现成解决方案的建议.

java algorithm caching mru java-me

13
推荐指数
2
解决办法
2万
查看次数

Windows cygwin相当于Mac OS X打开命令

我意识到这几乎与Windows相当于Mac OS X"open"命令Linux相当于Mac OS X"open"命令,但我具体询问一下我可以在Cygwin shell中运行的命令来使用绑定到参数扩展的当前Windows UI应用程序,如OS X在OS X上打开该应用程序,并在该应用程序中打开指定的文件.

cmd.exe启动命令不是Cygwin shell中的选项,也不是通过Cygwin可用的xdg-open或gnome-open.

有同等的吗?

windows command-line cygwin command-line-interface

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

如何检查有向图是否是非循环的?

如何检查有向图是否是非循环的?算法如何调用?我很感激参考.

theory algorithm directed-graph directed-acyclic-graphs

78
推荐指数
5
解决办法
7万
查看次数

你如何一次解压多个文件?

tar在目录中有一堆文件,我想立即从中提取所有文件.但这似乎没有做任何事情:

$ tar xf *.tar
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?如何一次解压缩一堆文件?

unix shell tar

68
推荐指数
3
解决办法
7万
查看次数

多核机器上更快的基础数据结构?

我一直在思考这个问题:

您是否可以利用您拥有多个CPU的优势,在多核计算机上构建更快的基础数据结构(即链表,哈希表,集合,跳转列表,布隆过滤器,红黑树等)?

我做了一些pthreads的初步试验,发现pthread_create()的顺序为30us,但是一个简单的hash_map插入所花费的时间远远少于单个核心.因此,我很难想象创建一个更快的hash_map <>,因为同步原语和线程创建是如此之慢.我还可以想象树的遍历和并行平衡,但同样,同步原语似乎会使运行时更长,而不是更短.

对我来说,我仍然觉得"我有更多的CPU,因此,我应该能够更快地做到这一点",但我无法完全围绕证据或反证据证明这一点.我在C++中进行了相当多的实验,但我现在怀疑其他语言可能会为这项任务提供更好的解决方案(erlang?).思考?

编辑细节:我认为有几种经常使用的编程/数据结构范例可能会加速.例如,我发现自己经常编写基本上看起来像这样的代码(其中实际数据已被"rand()"替换)

static const int N = 1000000; 
static const int M = 10000000; // 10x more lookups 
hash_map<int, int> m; 
// batch insert a bunch of interesting data 
for (int i = 0; i < N; i++) m[rand()] = rand(); 

// Do some random access lookups. 
for (int i = 0; i < M; i++) m[rand()]++;
Run Code Online (Sandbox Code Playgroud)

这种范例经常用于名称 - 值设置和配置数据,批处理等等.10x(或更多)查找/插入比率使传统的hash_map <>成为这种操作的理想选择.

这可以很容易地分成两半,具有插入阶段和查找阶段,并且在并行世界中,在两半之间可能存在一些"刷新队列"操作.交错插入+查找版本更难:

hash_map<int, int> m; 

for (int i = 0; i < N; i++) { 
   if …
Run Code Online (Sandbox Code Playgroud)

parallel-processing multithreading data-structures

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

C#如何在继续之前等待网页完成加载

我正在尝试创建一个程序,通过我们的缺陷跟踪系统的Web界面一次克隆多个错误.在继续之前,如何在页面完全加载之前等待?

//This is pseudo code, but this should give you an idea of what I'm trying to do.  The
//actual code uses multi-threading and all that good stuff :).
foreach (string bug in bugs)
{
    webBrowser.Navigate(new Uri(url));
    webBrowser.Document.GetElementById("product").SetAttribute("value", product);
    webBrowser.Document.GetElementById("version").SetAttribute("value", version);
    webBrowser.Document.GetElementById("commit").InvokeMember("click");

    //Need code to wait for page to load before continuing.
}
Run Code Online (Sandbox Code Playgroud)

c# webbrowser-control

28
推荐指数
5
解决办法
10万
查看次数