जब मैं एक मैट्रिक्स Eigen उपयोग करते हुए, इस तरह बनाने के लिए:मेम्पी क्यों Eigen मैट्रिक्स डेटा कॉपी करने में विफल रहता है, लेकिन std :: प्रति सफल हो?
Eigen::MatrixXd M(3,3);
M<< 1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0 ;
std::cout<<M<<std::endl;
पैदा करता
1 4 7
2 5 8
3 6 9
मैं प्रत्येक तत्व मुद्रण, डेटा के माध्यम से एक सूचक के साथ चल सकता है:
double * d = M.data();
for(int i = 0;i<M.size();i++)
{
std::cout<<*d<<" ";
d++;
}
std::cout<<std::endl;
का उत्पादन
1 2 3 4 5 6 7 8 9
,
double data_copy[9];
std::copy(M.data(),M.data()+M.size(),data_copy);
for(int i = 0;i<M.size();i++)
{
std::cout<<data_copy[i]<<" ";
}
std::cout<<std::endl;
1 2 3 4 5 6 7 8 9
पैदा करता है फिर भी मैं:
मैं भी ढेर पर एक ही प्रकार की एक सरणी पर प्रतिलिपि करने के std :: प्रतिलिपि का उपयोग कर सकते हैं, तो उस सरणी के तत्वों प्रिंट समकक्ष प्रतिलिपि करने के लिए memcpy का उपयोग नहीं कर सकते हैं।
double data_memcopy[9];
memcpy(data_memcopy,M.data(),M.size());
for(int i = 0;i<M.size();i++)
{
std::cout<<data_memcopy[i]<<" ";
}
std::cout<<std::endl;
1 0 0 0 0 0 0 0 0
कोई अच्छा कारण memcpy नहीं कर रहा है मैं क्या उम्मीद यह होना चाहिए पैदा करता है: यह केवल पहला तत्व कॉपी करने के लिए प्रबंधन करता है? (या मैं इसे अनुचित तरीके से उपयोग कर रहा हूँ?)