我需要将std::to_string
转换为字符串。有java.util.Arrays.toString()
方法,但它不接受数组作为输入。因此,需要for循环Any: 'static
。有没有一种方法我可以在没有明确的for循环的情况下实现这个目的?与Java一样,我们可以使用MyArray=np.array([np.array([1,2,3,.75]),np.array([1,2,2,.32]),np.array([1,2,3,.88])])
来实现此目的。
编辑:任何可行的方式都会有所帮助,以优化的方式解决问题。
答案 0 :(得分:3)
这样就可以了解
#include <iostream>
#include <sstream>
#include <iterator>
#include <algorithm>
#include <string>
int main()
{
int x[] = {1,2,3,4,5}; // sample array
std::ostringstream os;
std::ostream_iterator<int> out(os, " ");
std::copy(std::begin(x), std::end(x), out);
std::string result = os.str();
}
请记住result
在最后int
值之后会有一个尾随空格。我会把它当作练习去除。
稍微更隐晦。
std::ostringstream os;
std::copy(std::begin(x), std::end(x), std::ostream_iterator<int>(os, " "));
std::string result = os.str();
在C ++中,你不会得到与Java完全相同的东西,因为int []
在C ++中比在Java中更原始。例如,当作为函数的参数传递时,数组将转换为指向其第一个元素的指针,因此被调用的函数不会接收有关元素数量的信息。
答案 1 :(得分:2)
您可以通过使用某些元编程来避免循环。想法是在编译时展开循环:
首先,使用引用来避免数组到指针的衰减。这样,您可以推断出数组的大小。您可以使用该大小生成从0到size-1的编译时std::size_t
序列,并将数组和序列提供给实现函数:
template <std::size_t N>
std::string to_string(int (&array)[N]) {
return to_string_impl(array, std::make_index_sequence<N>());
}
在第二个函数中,您使用参数包扩展来生成展开的循环:
template <std::size_t N, std::size_t... Ns>
std::string to_string_impl(int (&array)[N], std::index_sequence<Ns...>) {
std::ostringstream os;
std::ostream_iterator<int> out(os, " ");
int dummy[sizeof...(Ns)] = { (os << array[Ns], 0)... };
/* generates:
os << array[0]
...
os << array[N-1]
*/
return os.str();
}
注意:别忘了包括:
#include <iostream>
#include <utility>
#include <sstream>
#include <iterator>
然后你拥有它:
int main() {
int arr[] = {1,2,3,4,5};
std::cout << to_string(arr); // prints "12345"
}
答案 2 :(得分:-2)
试一试
#include <sstream>
#include <string>
#include <iostream>
std::string ToString(int number)
{
std::string str;
std::stringstream ssout;
ssout << number;
str = ssout.str();
return str;
}
int main()
{
std::string mystr;
mystr = ToString(1234);
std::cout<<mystr<<std::endl;
getchar();
return 0;
}