给出以下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也会正确地完成他的工作吗?
很想听听有关如何改进实施的一些建议.
鉴于以下代码:
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次,结果不同.
谁能解释一下?
提前致谢.
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对象只有一个递增函数..那么为什么我必须将它声明为静态方法..?
谢谢
假设我想将unique_ptr保存到两个数据结构内的同一个对象中,有什么方法可以做到这一点,或者我应该考虑使用不同的方法?
在我的情况下,我有一个支持快速搜索的地图,我还想在两个其他数据结构中保持对键和值的引用..(说清单)
我真的很想听听更有经验的C++开发人员的建议,或者可能是Unique_ptr的替代方案.
提前致谢
给出以下简单代码:
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)