我正在尝试学习c ++ 11线程并拥有以下代码:
#include <iostream>
#include <thread>
#include <vector>
#include <mutex>
#include <algorithm>
void add(int& i){
std::mutex some_mutex;
// std::cout << " I am " << std::endl;
std::lock_guard<std::mutex> guard(some_mutex);
i++;
}
int main(){
int i = 0;
std::vector<std::thread> vec_threads;
for(int i = 0; i < 10; i++){
vec_threads.push_back(std::thread(add,std::ref(i)));
}
std::for_each(vec_threads.begin(),vec_threads.end(),
std::mem_fn(&std::thread::join));
std::cout<< " i = " << i << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个vectorhold std::thread,我从每个线程调用add函数并通过ref传递i.在我假设线程会做(添加i = i+1)之后,最终结果并不反映我想要的.
输出:i = 0
预期产出:i = 10
我知道序列化对象以及如何将它们保存到磁盘,但线程序列化实际上意味着什么?有没有人可以帮我解决这个问题并指出我正确的方向?
假设我有以下代码
int main(){
new int; // Is this expression l-value or r-value??
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道左值是持久对象(因为它在内存中具有特定的位置,即使在表达式结束后我们也可以访问后者)并且rvalues是临时对象(它在内存中没有位置并且在表达式结束后蒸发).
我看到了一些rvalue表达式.如果表达式返回一个地址(内存中的特定位置),它怎么能是rvalue.或者它是否是rvalue因为表达式new int返回(地址值),它会消失,并且在表达式结束后永远不会被捕获.
我找到了这个链接,说明我如何在我的身上发光效果ImageButton.因此,只要用户按下ImageButton该onTouchEvent()功能被称为有我所说的setImageBitmap()功能.问题是这个函数(setImageBitmap())似乎根本没有效果.
什么有效:
1)到目前为止,我扩展ImageButton如下
// Pen.java
public class Pen extends ImageButton {
public Pen(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
System.out.println("Now I am setting Pen");
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在Activity I中创建Pen(自定义ImageButton)实例,从实例定义setGlow()和调用.setImageBitmap()Pen
//MainActivity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Pen myImgbutton;
myImgbutton = (Pen) findViewById(R.id.pen); …Run Code Online (Sandbox Code Playgroud) 我试图将我的旧CMake移植到现代CMake(CMake 3.0.2或更高版本).在旧设计中,我有多个CMakelists.txt,每个目录都包含一个CMakeLists.txt文件.
我当前项目的目录结构如下:
.
??? VizSim.cpp
??? algo
??? contacts
? ??? BoundingVolumeHierarchies
? ? ??? AABBTree.h
? ??? SpatialPartitoning
??? geom
? ??? Geometry.h
??? math
? ??? Tolerance.h
? ??? Vector3.cpp
? ??? Vector3.h
??? mesh
? ??? Edge.h
? ??? Face.h
? ??? Mesh.cpp
? ??? Mesh.h
? ??? Node.h
??? util
| |__ Defines.h
| |__ Math.h
|
??? viz
??? Renderer.h
Run Code Online (Sandbox Code Playgroud)
我打算做的只是使用一个CMakelists.txt并将所有cpp文件放在SOURCE中,并将所有标题放在HEADER中并使用add_executable.
set (SOURCE
${SOURCE}
${CMAKE_CURRENT_SOURCE_DIR}/src/mesh/Mesh.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/math/Vector3.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/VizSim.cpp
....
)
set (HEADER
${HEADER}
${CMAKE_CURRENT_SOURCE_DIR}/src/mesh/Mesh.h
${CMAKE_CURRENT_SOURCE_DIR}/src/math/Vector3.h …Run Code Online (Sandbox Code Playgroud) 让我们说A类有2d enum向量,我想在类之外访问这个2d向量并操纵该值.
我的问题是:如何声明新向量以保持类在类之外的返回值,因为我的类型(枚举类型)在类中?我希望有点像
A a(5);
std::vector<std::vector<A::s> > x = a.get_2dvec();
Run Code Online (Sandbox Code Playgroud)
但这给了我错误说它的私有然后如果我使类型公开我没有声明错误.
我知道我可以放置枚举{RED,BLUE,GREEN}; 和typedef的颜色; 在课外和实现结果但是让我们说主要是在不同的文件上.
// f1.cpp
#include <iostream>
#include <vector>
class A{
// This enum is inside class
enum s {RED, BLUE, GREEN};
typedef s color;
const int size = 3;
std::vector<std::vector<color> > color_array;
public:
A(int size_):size(size_),color_array(size){
std::cout << "vector size = " << color_array.size() << std::endl;
for(int i = 0; i < size; i++){
for(int j = 0; j < size; j++){
color_array[i].push_back(RED);
}
}
}
void print(){
for(auto …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用c ++模拟虚拟MIPS架构.在这个过程中,我必须将mips体系结构的每一行存储为struct并将其存储到vector中,这样我就可以模拟5个阶段的管道.我的问题是,我怎样才能代表每一条指令,例如:
Loop: ST R1 R2 //store to M[R2] the contents of R1
ADD R1 R2 R3 // R1 R2 and R3 are register
SUB R1 1
BRNZ R1 Loop //if R1 is not 0 then loop
Run Code Online (Sandbox Code Playgroud)
每一行看起来都不同,我试图找到一种在struct中表示这种情况的通用方法.
我正在阅读这篇博客文章,并发现了这段代码.
#include <iostream>
#include <string>
using namespace std;
struct LNode {
int data;
LNode* next;
LNode(int n){data = n; next = nullptr;}
void add_to_end(int n) {
if (next)
next->add_to_end(n);
else
next = new LNode(n);
}
~LNode() { cout << " I am from LNode Destructor " << endl; delete next; }
};
int main()
{
LNode root(1);
root.add_to_end(2);
root.add_to_end(3);
root.add_to_end(4);
}
Run Code Online (Sandbox Code Playgroud)
这段代码的输出是
I am from LNode Destructor
I am from LNode Destructor
I am from LNode Destructor
I …Run Code Online (Sandbox Code Playgroud) 下面是共享指针的示例代码。我在花括号范围内定义了一个共享指针。sp1 由新的 A(计数器 = 1)初始化,并将 sp1 分配给 sp2(复制和/或赋值将计数器加 1,因此计数器 = 2)。我一直认为当计数器变为 0 时会调用 A 的析构函数。但在我的情况下,智能指针即将超出范围(通过花括号)时,计数器为 2。
我的问题是:谁将计数器从 2 更改为 0?
#include <iostream>
#include <memory>
using namespace std;
class A{
public:
~A(){
std::cout << "~A" << std::endl;
}
};
int main(){
{
shared_ptr<A> sp1 (new A);
shared_ptr<A> sp2 = sp1;
std::cout << "sp1 count = " << sp1.use_count() << std::endl;
std::cout << "sp2 count = " << sp2.use_count() << std::endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑: 链接到智能指针上的论文
输出:
sp1 计数 …