我想使用这样的东西:
char theArray[]=new char[8];
theArray= { 1,2,3,4,5,6,7,8};
而不是
char theArray[] = { 1,2,3,4,5,6,7,8};
类似的事情可能吗?
答案 0 :(得分:6)
的C ++ 0x
char* ch;
ch = new char[8]{1, 2, 3, 4, 5, 6, 7, 8};
@David Thornley:然后切换这些线并没有问题。而且你真的在谈论将char[8]
重新分配到与前一个值相同的内存池中,那么你需要使用自己的分配器,例如:
char* ch1 = new char[8]{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'i'};
char* ch2 = new(ch1) char[8]{1, 2, 3, 4, 5, 6, 7, 8};
afaik OP不太可能需要它。
答案 1 :(得分:4)
char theArrayCopy[] = { 1,2,3,4,5,6,7,8};
//
//
char* theArray=new char[sizeof(theArrayCopy)];
// or
char theArray[sizeof(theArrayCopy)];
memcpy(theArray, theArrayCopy, sizeof(theArrayCopy));
答案 2 :(得分:3)
您可能想要考虑的一种可能性是使用Boost Assign,您可以使用以下内容:
std::vector<int> v;
v += 1, 2, 3, 4, 5, 6, 7, 8;
虽然它不适用于实际的数组 - 虽然它不一定是矢量,但它确实需要某种集合类,而不是内置类型。 OTOH,如果没有其他非常特定原因,你可能还是想要使用一个集合。
答案 3 :(得分:2)
这很糟糕,我知道,但也适用于这种情况:
memcpy( theArray, "\x01\x02\x03\x04\x05\x06\x07\x08", sizeof(theArray) );
答案 4 :(得分:1)
注意:我知道这不是原始问题的答案,但我认为这是正确的做法,所以我把它作为CW帖子......
如果你想要,你可以稍微概括一下......
class IntegerSequenceGenerator
{
int step_;
int value_;
public:
IntegerSequenceGenerator(int start = 0, int step = 1)
: step_(step), value_(start) {}
int operator()() {
int result = value_ + step_;
std::swap(result, value_);
return result;
}
};
使用:
int main() {
std::vector<int> myArray;
std::generate_n(std::back_inserter(myArray), 8, IntegerSequenceGenerator());
}
或者:
int main() {
std::vector<int> myArray(8);
std::generate(myArray.begin(), myArray.end(), IntegerSequenceGenerator());
}
或:
int main() {
int myArray[8];
std::generate(myArray, myArray + (sizeof(myArray)/sizeof(int)), IntegerSequenceGenerator());
}
答案 5 :(得分:1)
有一个问题,其他答案没有解决。 (虽然有几个确实解决了。)
这会在堆栈中放置一个类型为char[8]
的数组:
char theArray[] = { 1,2,3,4,5,6,7,8};
这将它放在堆上(实际上它是非法的,但我会假设您的编译器接受它):
char theArray[]=new char[8];
假设你真的不想在堆上,但只想初始化它,这将有效:
char theArray[max_array_size]; // need to specify size to place on stack
/* code */
static const char theInitializer[] = { 1,2,3,4,5,6,7,8};
std::copy( theInitializer, theInitializer + sizeof theInitializer, theArray );