将 memset 用于特定行的二维数组
Use memset for 2d array at specific row
最近,我了解了C++
。特别是,我了解了 memset
函数。但我不知道如何在特定行 2d 数组 设置值
示例:
int dp[10][10];
// I want to set all values for dp[0] by using memset
// I can do it, by using For loop, like
for (int i = 0; i < 10; i++)
dp[0][i] = 1000;
我试过了
memset(dp[0], 1000, sizeof dp[0]);
但效果不佳。
所以我想知道是否有任何方法可以像我希望的那样使用memset?谢谢 :D
你不能做这样的事情,因为 memset 写入字节。
例如 memset( dp[0],3,sizeof( dp[0] )) ;
将在 dp[0] 的所有 10 个整数中写入字节 == 3。
所以 dp[i] == 0x03030303
for i in 0..9 !
正确的函数是std::fill_n
:https://en.cppreference.com/w/cpp/algorithm/fill_n
std::fill_n(std::begin(dp[0]), sizeof dp[0] / sizeof dp[0][0], 1000);
或 C++17 或更高版本:
std::fill_n(std::begin(dp[0]), std::size(dp[0]), 1000);
std::fill
也可以:https://en.cppreference.com/w/cpp/algorithm/fill
std::fill(std::begin(dp[0]), std::end(dp[0]), 1000);
我会这样做:
for (auto &i : dp[0]) i = 1000;
也是最短的版本
最近,我了解了C++
。特别是,我了解了 memset
函数。但我不知道如何在特定行 2d 数组 设置值
示例:
int dp[10][10];
// I want to set all values for dp[0] by using memset
// I can do it, by using For loop, like
for (int i = 0; i < 10; i++)
dp[0][i] = 1000;
我试过了
memset(dp[0], 1000, sizeof dp[0]);
但效果不佳。
所以我想知道是否有任何方法可以像我希望的那样使用memset?谢谢 :D
你不能做这样的事情,因为 memset 写入字节。
例如 memset( dp[0],3,sizeof( dp[0] )) ;
将在 dp[0] 的所有 10 个整数中写入字节 == 3。
所以 dp[i] == 0x03030303
for i in 0..9 !
正确的函数是std::fill_n
:https://en.cppreference.com/w/cpp/algorithm/fill_n
std::fill_n(std::begin(dp[0]), sizeof dp[0] / sizeof dp[0][0], 1000);
或 C++17 或更高版本:
std::fill_n(std::begin(dp[0]), std::size(dp[0]), 1000);
std::fill
也可以:https://en.cppreference.com/w/cpp/algorithm/fill
std::fill(std::begin(dp[0]), std::end(dp[0]), 1000);
我会这样做:
for (auto &i : dp[0]) i = 1000;
也是最短的版本