小编Rou*_*uki的帖子

使用memcpy的Vector的push_back实现

给出以下push_back代码:

template <typename T>
void Vector<T>::push_back(const T& item) {

if (_size == _capacity) {
    _capacity = _capacity + (_capacity > 1 ? (_capacity / 2) : 1);
    T* newVec = new T[_capacity];
    memcpy(newVec, _ptr, _size*(sizeof(T)));
    delete [] _ptr;
    _ptr = newVec;
}
_ptr[_size++] = item;
}
Run Code Online (Sandbox Code Playgroud)

vector的类包含以下成员:

T*  _ptr;
size_t _size;
size_t _capacity;
Run Code Online (Sandbox Code Playgroud)

这种实施安全吗?即使T是多态类型,memcpy也会正确地完成他的工作吗?

很想听听有关如何改进实施的一些建议.

c++

2
推荐指数
1
解决办法
1828
查看次数

位移问题

鉴于以下代码:

public class Something {
public static void main(String[] args) {
    int num = 1;

    num <<= 32;
    System.out.println(num); 

    num = 1;
    for (int i = 0 ; i < 32; i++)
        num <<= 1;
    System.out.println(num);
}
}
Run Code Online (Sandbox Code Playgroud)

第一个输出(来自num << = 32)是1.

第二个输出(来自for循环)为0.

我不明白..它看起来和我一样..两种方式都将"1"数字(lsb)移动32次,结果不同.

谁能解释一下?

提前致谢.

java

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

基本的多线程问题

package demo5;

class Process extends Thread {

static int counter = 0;

public static  synchronized void increment() { counter++; }

public void run() {
    for (int i = 0; i < 1000000; i++)
    {
        increment();
    }
    System.out.println("Done.");
  }
}

public class App {

public static void main(String[] args) throws InterruptedException {
    Process p1 = new Process();
    Process p2 = new Process();
    p1.start();
    p2.start();

    p1.join();
    p2.join();

    System.out.println("Value of count is :" + p1.counter);

}

}
Run Code Online (Sandbox Code Playgroud)

如果我将增量​​函数声明为NON-STATIC函数,则结尾处的计数器值不会是200万.

另一方面,当增量方法定义为静态时,它可以正常工作.

据我所知,所有Process对象只有一个递增函数..那么为什么我必须将它声明为静态方法..?

谢谢

java multithreading

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

在两个数据结构中保持相同的唯一指针

假设我想将unique_ptr保存到两个数据结构内的同一个对象中,有什么方法可以做到这一点,或者我应该考虑使用不同的方法?

在我的情况下,我有一个支持快速搜索的地图,我还想在两个其他数据结构中保持对键和值的引用..(说清单)

我真的很想听听更有经验的C++开发人员的建议,或者可能是Unique_ptr的替代方案.

提前致谢

c++ pointers

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

指向功能成员的指针

给出以下简单代码:

namespace exercise {

class A {
public:

    virtual void a() = 0;
    virtual void b() = 0;
    virtual void c() = 0;

};

class B : public A {

    void a() { std::cout << "a function @ B class"; }
    void b() { std::cout << "b function @ B class"; }
    void c() { std::cout << "c function @ B class"; }

};

class C : public A {

    void a() { std::cout << "a function @ C class"; …
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
214
查看次数

标签 统计

c++ ×3

java ×2

multithreading ×1

pointers ×1