我正在尝试使用std::ofstream::write方法编写二进制文件.我发现,有些字符不是按原样写的,例如:
std::ofstream in("testout");
int i =10;
in.write((const char *)(&i), sizeof(i));
in.close();
return 0;
Run Code Online (Sandbox Code Playgroud)
将以下内容写入二进制文件:0d 0a 00 00 00
为什么会出现其他0d字节?
我对自己熟悉QT5并发库.我正在查看QWaitCondition示例(http://qt-project.org/doc/qt-5.0/qtcore/qwaitcondition.html#details).
这里,一个线程(线程B)读取用户输入,所有其他线程(线程A)处理此输入.
线程A:
forever {
mutex.lock();
keyPressed.wait(&mutex);
++count;
mutex.unlock();
do_something();
mutex.lock();
--count;
mutex.unlock();
}
Run Code Online (Sandbox Code Playgroud)
线程B:
forever {
getchar();
mutex.lock();
// Sleep until there are no busy worker threads
while (count > 0) {
mutex.unlock();
sleep(1);
mutex.lock();
}
keyPressed.wakeAll();
mutex.unlock();
}
Run Code Online (Sandbox Code Playgroud)
使用count变量和扩展互斥同步的原因是为了防止符号丢失.
问题是,我认为符号仍有可能丢失:想象下面的场景:
线程A处理符号,并减少反对(--count); 互斥体被释放; 然后线程A停止
线程B从睡眠状态返回,获取互斥锁,查看该计数== 0,并调用keyPressed.wakeAll(),然后解锁互斥锁.但是,wakeAll()调用无处可去,因为线程A没有等待.
我是对的,还是我错过了什么?如果我是对的,如何纠正这个例子以真正阻止它跳过符号?
我正在使用 STL 库,我的目标是尽量减少数据重新分配的情况。我想知道,是吗
std::vector::assign(size_type n, const value_type& val)
如果大小未更改或实际上只是分配新值(例如,使用operator=),则重新分配数据?
http://www.cplusplus.com/上的 STL 文档说明如下 (C++98):
在填充版本 (2) 中,新内容是 n 个元素,每个元素都初始化为 val 的副本。如果发生重新分配,则使用内部分配器来分配所需的存储。
调用之前容器中保存的任何元素都将被销毁并替换为新构造的元素(不会发生元素分配)。当且仅当新向量大小超过当前向量容量时,这会导致已分配存储空间的自动重新分配。
“没有发生元素分配”这句话让一切变得有点混乱。
例如,我想要一个类向量(例如 OpenCV 的 cv::Vec3i)。这是否意味着
编辑:在这种情况下使用 allocate 的全部目的是将向量中的所有值设置为 0 (如果我有 std::vector< cv::Vec3i > v)。它将进行很多很多次。std::vector 本身的大小不会改变。
我想做的(以更简短的方式)如下:
for(int i=0; i<v.size(); i++)
for(int j=0; j<3; j++)
v[i][j] = 0;
Run Code Online (Sandbox Code Playgroud)
现在我对C++98感兴趣
在C++ 11中,有两个版本的std :: unordered_map :: operator [],即:
mapped_type& operator[] ( const key_type& k ); //1
mapped_type& operator[] ( key_type&& k ); //2
Run Code Online (Sandbox Code Playgroud)
有两个问题:
1)为什么第二个是必要的 - 第一个允许将常量传递给函数,因为第一个包含关键字const
2)例如,在这种情况下将调用哪个版本1或2:
std::unordered_map<std::string, int> testmap;
testmap["test"] = 1;
Run Code Online (Sandbox Code Playgroud) 我刚开始使用Python,由于我的背景是更低级的语言(java,C++),我真的无法得到一些东西.
因此,在python中,例如,可以通过打开文本文件来创建文件变量,然后迭代它的行,如下所示:
f = open(sys.argv[1])
for line in f:
#do something
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试f[0]解释器给出错误.那么f对象具有什么样的结构for ... in ... :?如果我可以将循环应用于对象,我通常如何知道?