我已經分配了一個大的雙向量,可以說有100000個元素。在我的代碼中,我想將所有元素設置爲一個常量,非零值。如何在不使用for循環遍歷所有元素的情況下執行此操作? 我也使用blas包,如果有幫助的話。用非零值初始化雙數組(blas)
回答
你可以使用std::fill
(#include <algorithm>
):
std::fill(v.begin(), v.end(), 1);
這實質上也只是順理成章的環..
你總是使用memset()
如果你不想循環。
也就是說,memset(myarr, 5, arrsize);
爲了填補所有5。小心隱式轉換爲無符號字符。
提要
#include <string.h> void * memset(void *b, int c, size_t len);
說明
The memset() function writes len bytes of value c (converted to an unsigned char) to the byte string b.
而如果向量是大,你需要它去快,你正在使用gcc,則:
代碼生成塊移動(memcpy) 和塊集(memset)被重寫。 GCC現在可以選擇最好的算法 (循環,展開的循環,與 代表前綴或庫調用指令)的基礎上 正在複製的塊的尺寸和 所述CPU進行了優化。
-1:他有一個雙向量和一個雙向量的memset(我可以理解它是一個連續的向量下面的數組),當他特別希望它是一個非零值不是微不足道的。可以通過memset設置的值是一個字節(無符號字符的大小),而他想設置的常量是4個字節 – 2011-03-10 13:52:31
在讀取時錯過了雙向量。如果他需要全部4字節填充,那麼是的,這是不行的。另一方面,他可能希望將它們標記爲「未使用」,並且一個字節可以實現。 – Milan 2011-03-10 13:54:31
雖然我沒有看到OP提及。但要準確地說出他的問題,我相信std :: fill是他的最佳選擇。 – 2011-03-10 13:56:51
'fill'與您所說的完全吻合。
注意,它也可以構建載體充滿了規定值:
std::vector<double> vec(100000, 3.14);
所以,如果「在某一時刻」是指「建設後,立即」,做到這一點吧。此外,它意味着你可以這樣做:
std::vector<double>(100000, 3.14).swap(vec);
如果「在某一時刻」「更改尺寸後立即」的意思,和你期望/希望被重新分配矢量(「期望」,如果這可能是有用的你使它比以前的容量更大,「想要」如果你把它變得更小,並且希望它被修剪以節省內存)。
- 1. 初始化C風格的數組,沒有循環非零值
- 2. 如何用零初始化Swift數組
- 3. 如何初始化JavaScript數組非零指數
- 4. 如何用非零值保護數組定義不完全初始化?
- 5. 初始化不帶零的數組
- 6. 如何初始化靜態非零長度的空數組?
- 7. 初始化數組的值
- 8. 用數組或初始化初始化一個NSMutableArray初始化
- 9. 用來初始化用零
- 10. C#數組初始化 - 使用非默認值
- 11. 初始化有非常數值
- 12. 初始化數組時初始化System.AccessViolationException
- 13. 使用值初始化靜態數組
- 14. C:初始化數組值爲零的問題
- 15. 如何正確初始化數組的值爲零?
- 16. UICollectionView必須使用非零布局參數進行初始化
- 17. 'UICollectionView必須用非零布局參數初始化' - Swift 4
- 18. C結構自動初始化值,數組初始化
- 19. 數組初始化零與分配零點
- 20. 數組初始化
- 21. 數組初始化
- 22. 初始化數組
- 23. 數組初始化
- 24. 將字段值初始化爲零?
- 25. 爲什麼C++默認初始化不會零初始化非類別成員
- 26. 用cpp初始化數組和用零填充
- 27. C++數組初始化與賦值
- 28. 初始化單值多維數組
- 29. 同時初始化數組共享值
- 30. 不保存初始化值的數組
除了**可能針對某些特定類型和迭代器類別進行優化(即使不太可能)。 – 2011-03-10 13:43:02
我也會推薦這種方法。 – 2011-03-10 13:54:03