std::cout << "=== PArray 基本使用範例 ===" << std::endl;
int* numbers[5];
for (int i = 0; i < 5; ++i) {
numbers[i] = new int(i * 10);
}
std::string* strings[3];
strings[0] = new std::string("Hello");
strings[1] = new std::string("World");
strings[2] = new std::string("Test");
std::cout << "陣列長度: " << intPtrArray.length() << std::endl;
std::cout << "元素大小: " << intPtrArray.elementSize() << " bytes" << std::endl;
for (int i = 0; i < 5; ++i) {
intPtrArray.set(numbers[i], i);
}
std::cout << "儲存的整數值:" << std::endl;
for (int i = 0; i < intPtrArray.length(); ++i) {
void* ptr = intPtrArray.get(i);
if (ptr) {
int* intPtr = static_cast<int*>(ptr);
std::cout << " 索引 " << i << ": " << *intPtr << std::endl;
}
}
void* buffer[10];
std::cout << "\n使用外部記憶體的陣列:" << std::endl;
std::cout << "外部陣列長度: " << externalArray.length() << std::endl;
for (int i = 0; i < 3; ++i) {
externalArray.set(strings[i], i);
}
std::cout << "儲存的字串值:" << std::endl;
for (int i = 0; i < 3; ++i) {
void* ptr = externalArray.get(i);
if (ptr) {
std::string* strPtr = static_cast<std::string*>(ptr);
std::cout << " 索引 " << i << ": " << *strPtr << std::endl;
}
}
class TypeConversionDemo {
public:
static void demonstrateTypeConversion() {
std::cout << "\n=== 型別轉換範例 ===" << std::endl;
double* doubles[4];
for (int i = 0; i < 4; ++i) {
doubles[i] = new double(i * 1.5);
pArray.set(doubles[i], i);
}
std::cout << "透過型別化陣列存取:" << std::endl;
for (
int i = 0; i < typedArray.
length(); ++i) {
double* ptr = typedArray.
get(i);
if (ptr) {
std::cout << " 值 " << i << ": " << *ptr << std::endl;
}
}
for (int i = 0; i < 4; ++i) {
delete doubles[i];
}
}
};
TypeConversionDemo::demonstrateTypeConversion();
class ObjectManager {
private:
int objectCount;
public:
ObjectManager(int capacity)
: objects(capacity, sizeof(void*)), objectCount(0) {}
~ObjectManager() {
cleanup();
}
bool addObject(void* obj) {
if (objectCount < objects.
length()) {
objects.
set(obj, objectCount);
objectCount++;
std::cout << "新增物件,目前數量: " << objectCount << std::endl;
return true;
}
std::cout << "物件管理器已滿" << std::endl;
return false;
}
void* getObject(int index) {
if (index >= 0 && index < objectCount) {
return objects.
get(index);
}
return nullptr;
}
int findObject(void* obj) {
for (int i = 0; i < objectCount; ++i) {
if (objects.
get(i) == obj) {
return i;
}
}
return -1;
}
bool removeObject(void* obj) {
int index = findObject(obj);
if (index != -1) {
if (index != objectCount - 1) {
void* lastObj = objects.
get(objectCount - 1);
objects.
set(lastObj, index);
}
objectCount--;
std::cout << "移除物件,剩餘數量: " << objectCount << std::endl;
return true;
}
return false;
}
int getObjectCount() const {
return objectCount;
}
int getCapacity() const {
}
void printAllObjects() {
std::cout <<
"物件管理器內容 (" << objectCount <<
"/" << objects.
length() <<
"):" << std::endl;
for (int i = 0; i < objectCount; ++i) {
void* obj = objects.
get(i);
std::cout << " 索引 " << i << ": " << obj << std::endl;
}
}
void cleanup() {
objectCount = 0;
}
};
std::cout << "\n=== 物件管理範例 ===" << std::endl;
ObjectManager manager(5);
std::vector<std::unique_ptr<int>> testObjects;
for (int i = 0; i < 7; ++i) {
testObjects.push_back(std::make_unique<int>(i * 100));
}
for (int i = 0; i < testObjects.size(); ++i) {
manager.addObject(testObjects[i].
get());
}
manager.printAllObjects();
void* searchObj = testObjects[2].get();
int foundIndex = manager.findObject(searchObj);
std::cout << "物件 " << searchObj << " 在索引: " << foundIndex << std::endl;
if (manager.removeObject(searchObj)) {
std::cout << "成功移除物件" << std::endl;
manager.printAllObjects();
}
class MemoryEfficientArray {
private:
public:
MemoryEfficientArray(int size) : storage(size, sizeof(void*)) {
for (
int i = 0; i < storage.
length(); ++i) {
}
}
void setPointer(int index, void* ptr) {
if (index >= 0 && index < storage.
length()) {
}
}
void* getPointer(int index) {
if (index >= 0 && index < storage.
length()) {
return storage.
get(index);
}
return nullptr;
}
int getSize() const {
}
void printMemoryUsage() {
int usedSlots = 0;
for (
int i = 0; i < storage.
length(); ++i) {
if (storage.
get(i) !=
nullptr) {
usedSlots++;
}
}
std::cout <<
"記憶體使用情況: " << usedSlots <<
"/" << storage.
length()
<<
" (" << (usedSlots * 100 / storage.
length()) <<
"%)" << std::endl;
}
};
std::cout << "\n=== 記憶體管理範例 ===" << std::endl;
MemoryEfficientArray memArray(10);
for (int i = 0; i < 6; ++i) {
memArray.setPointer(i, &numbers[i % 5]);
}
memArray.printMemoryUsage();
for (int i = 0; i < 5; ++i) {
delete numbers[i];
}
for (int i = 0; i < 3; ++i) {
delete strings[i];
}
動態記憶體管理類別
Definition Memory.h:38
指標陣列類別,實作動態大小的指標容器。
Definition PArray.h:329
virtual int length(void) const override
取得陣列長度
virtual bool set(void *const &e, int index) override
設置指定索引的元素值
virtual void *& get(int index) const override
取得指定索引的元素
通用陣列介面,提供基本的陣列操作功能。
Definition Array.h:114
virtual int length(void) const override
取得陣列長度
virtual E & get(int index) const override
取得指定索引的元素