我想知道更有经验的人是否能够澄清这是否是对矢量进行的错误操作:
std::vector<int> v{1, 2, 3, 4, 5};
v.insert(v.begin() + 1, v[0]);
Run Code Online (Sandbox Code Playgroud)
我问的原因是因为要插入的元素是对向量中第0个元素的引用.如果插入强制向量调整大小(因为其容量已满),则引用v[0]将无效,并且代码可能会插入不正确的值.这里有一些伪代码可能会证明:
template <typename T>
void vector_insert_method(Iterator pos, const T& value) {
if capacity full:
reallocate array and copy over element
// if value was reference to elem in this vector,
// that reference might be invalidated
insert element
++size
}
Run Code Online (Sandbox Code Playgroud)
在并发系统上,此问题可能更为现实.
如果您尝试插入在您尝试插入的位置之后的元素,会发生类似且相关的问题.例如,执行类似v.insert(v.begin(), v[2])因为标准指出插入点之后对元素的引用无效.这保证有效吗?
我有一个关于使用std::searchvs string::find来处理字符串的问题.我知道使用类特定成员函数算法通常比标准库算法更好,因为它可以根据类进行优化,但我想知道是否合理,为了保持一致性,请使用std::search迭代器而不是比string::find索引.
对我来说做这样的事情会不会是一种罪过,还是我应该坚持使用string :: find?在性能或风格方面,是否有任何巨大的优势?
关于蒙特卡罗树搜索,我有一个小但可能很愚蠢的问题.我理解其中的大部分内容但是一直在查看一些实现,并注意到在MCTS针对给定状态运行并返回最佳移动之后,该树被丢弃.因此,对于下一步行动,我们必须在这个新状态下从零开始运行MCTS以获得下一个最佳位置.
我只是想知道为什么我们不保留旧树的一些信息.似乎有关于旧树中状态的有价值信息,特别是考虑到最佳移动是MCTS最常探索的移动.有什么特别的原因我们不能以某种有用的方式使用这些旧信息吗?
这就是仅使用称重天平从一组硬币中找到假币的经典问题。为了完整起见,以下是此类问题的一个示例:
\n\n\n\n\n一个众所周知的例子有九个(或更少)物品,比如硬币(或球),除了一个之外,其他物品的重量相同,在这个例子中,它比其他物品轻\xe2\x80\x94a假货(一个奇怪的球)。只有在秤 \xe2\x80\x94 上称重才能感觉到差异,但只能称量硬币本身。是否可以仅通过两次称重来分离出假币?
\n
我们正在处理只有一枚硬币是假币的情况,并且我们知道它是怎么回事(即我们知道它更重/更轻)。
\n\nN我的问题是,是否有一种通用的有效算法来解决带有一枚假币的该问题的通用版本。我一直在考虑这个问题,到目前为止,我已经知道,如果N是 的形式3^k,那么您可以通过递归地将它们分成三个组来找到伪造品\xe2\x8c\x88log_3_(N)\xe2\x8c\x89。这对所有 N 人都是如此,而不仅仅是来自那些人吗3^k?如果是这样,我们能做得更好吗?
我认为最好是解释一下情况,这样看来似乎不是太不可思议了。我想为我想让我的一些学生从事的项目发布一些入门代码。该项目涉及通过某些Internet网页抓取,因此,我想为他们提供一个URLStream类,该类将下载输入URL的html并将其作为字符串返回给他们。
问题是,我似乎找不到一种特别好的方法来以跨平台的方式处理网络(学生有mac / windows / linux计算机)。我知道Boost Asio和libCurl之类的库,但是使用这些库的问题是我无法强制所有学生下载它们。所以我的问题是双重的:
我一直在阅读有关node2vec嵌入算法的内容,但我有点困惑它是如何工作的。
作为参考,node2vec 由 p 和 q 参数化,并通过模拟来自节点的一堆随机游走并在这些游走上运行 word2vec 嵌入作为“句子”来工作。通过以不同方式设置p和q,您可以在模拟阶段获得更多BFS或更多DFS类型的随机游走,在嵌入中捕获不同的网络结构。
设置 q > 1 为我们提供了更多的 BFS 行为,因为游走样本由小局部区域内的节点组成。我感到困惑的是,论文说这相当于将具有相似结构属性的节点彼此靠近地嵌入。
我不太明白这是如何运作的。如果我的网络中有两个相距较远的独立星型/集线器结构节点,为什么基于这两个节点的随机游走的嵌入会将这两个节点在嵌入中靠近在一起?
我注意到我能够std::ifstream通过值返回一个函数,而编译器没有给我任何与删除的复制构造函数相关的错误.这应该不起作用,因为ifstreams不应该是可复制的,所以我想它是以某种方式内联函数?有没有人对此有解释?
我正在使用Apple LLVM版本7.3.0(clang-703.0.31)g ++运行Mac OSX El Capitan 10.11.6
ifstream enterFile(){
ifstream input("hello.txt");
return input;
}
int main() {
ifstream f = enterFile();
string line;
while(getline(f, line)) {
cout << line << endl;
}
cout << "===== Done" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) c++ ×4
algorithm ×2
graph-theory ×1
montecarlo ×1
networking ×1
nlp ×1
reference ×1
string ×1
vector ×1