我对指针
有点新意在我的程序中,我定义了一个类“Record”和两个数组
Record book[10];
do{
Record tempBook[10];
// ... Some sorting command
// Set "book" to the content of "tempBook" here
}while()
有人可以建议我将书设置为tempBook的内容吗?
谢谢!
答案 0 :(得分:4)
基本上,您必须了解automatic and free-store objects与其生命周期之间的区别,才能理解以下解释。
std::copy(book, book + 10, tempBook);
// if you compiler supports C++11, then
// std::copy(std::cbegin(book), std::cend(book), std::begin(tempBook));
这会将book
s的所有内容复制到tempBook
s。
如果您想要一组指向书籍的指针,那么您必须将tempBook
声明为Record
数据类型的指针,而不是对象。
Record books[10];
// later
Record *tempBooks[10];
for(int i = 0; i < 10; ++i)
{
tempBooks[i] = &books[i];
}
如果要在堆栈上创建10本书,然后将它们复制到另一个数组(堆栈中),则可以使用上面的std::copy
。如果你想在免费商店中创建对象(使用new / delete),那么创建它们并使任意数量的指针指向这些匿名对象:
Record *books = new Record[10];
// later
Record *tempBooks = books;
但是,我建议你使用C ++ 11提供的智能指针,以便更好地处理内存并避免内存泄漏;使用共享指针。
#include <memory>
std::shared_ptr<Record> spBooks[10];
spBooks[0] = make_shared<Record>(/*pass constructor arguments*/);
// later
std::shared_ptr<Record> spTempBooks[10];
std::copy(spBooks, spBooks + 10, spTempBooks);
更好的方法是使用std::vector
s。低级别的内存处理,无论多么令人着迷,都会导致难以找到错误;把它留给容器类来为你处理它是明智的。
答案 1 :(得分:0)
您可以执行循环以将值从tempBook分配给book。例如
for(int i = 0; i < 10; i++)
{
book[i].property = tempBook[i].property;
}
答案 2 :(得分:0)
定义一个副本c'tor并将一个对象分配给其他任何麻烦。
class Record {
public:
Record(const Record& rec) {
//do your assignment from rec to this pointer
}
};
如果你这样定义一个,那么,
do{
Record tempBook[10];
// ... Some sorting command
for (size_t i=0; i<10; i++) //Define array size in macro
{
tempBook[i]=book[i];
}
}while()
这里的tempBook在while循环中有生命。你用tempBook做什么修改都不会反映书籍对象。我的建议是使用vector代替对象数组。
因此,要将书籍内容设置为tempBook,您可以使用上述方法。