Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C++; 如果用户输入一个像4210的整数,那么如何将该整数的每个数字放在C++中的向量中?_C++_Vector_Integer_Digits - Fatal编程技术网

如何在C++; 如果用户输入一个像4210的整数,那么如何将该整数的每个数字放在C++中的向量中?

如何在C++; 如果用户输入一个像4210的整数,那么如何将该整数的每个数字放在C++中的向量中?,c++,vector,integer,digits,C++,Vector,Integer,Digits,,可以这样做: std::vector<int> numbers; int x; std::cin >> x; while(x>0) { numbers.push_back(x%10); x/=10; } std::reverse(numbers.begin(), numbers.end()); std::向量数; int x; 标准:cin>>x; 而(x>0) { 数字。推回(x%10); x/=10; } std::reverse(number

,可以这样做:

std::vector<int> numbers;
int x;
std::cin >> x;
while(x>0)
{
   numbers.push_back(x%10);
   x/=10;
}

std::reverse(numbers.begin(), numbers.end());
std::向量数;
int x;
标准:cin>>x;
而(x>0)
{
数字。推回(x%10);
x/=10;
}
std::reverse(numbers.begin(),numbers.end());

或者如果您喜欢使用
std::string
,您可以使用:

std::vector<int> intVector;

int x;
std::cin >> x;

for (const auto digit : std::to_string(x)) {
    intVector.push_back(digit - '0');
}
std::vector intVector;
int x;
标准:cin>>x;
for(常量自动数字:std::to_字符串(x)){
intVector.push_back(数字-'0');
}
这假设您的编译器可以使用C++11


我不明白为什么人们会建议这样的解决方案,比如来回转换到
int
,而你所需要的只是一个接一个的数字。。。对于用户以十进制表示的数字

要将
“4321”
转换为
std::vector{4,3,2,1}
最简单的方法是:

std::string input;
std::cin >> input;

std::vector<int> vec;

for (char const c: input) {
    assert(c >= '0' and c <= '9' and "Non-digit character!");
    vec.push_back(c - '0');
}
std::字符串输入;
std::cin>>输入;
std::vec;
for(字符常量c:输入){

断言(c>='0'和c我发现的最简单的方法是:

std::vector<int> res;

int c;
std::cin >> c;

while(c>0)

    {
    res.insert(res.begin(),c%10);
    c/=10;
    }
std::vector res;
INTC;
标准:cin>>c;
而(c>0)
{
res.insert(res.begin(),c%10);
c/=10;
}

你的意思是std::vector iv{4,2,1,0}??是的,但我希望最终用户输入这些数字,而不是程序员。是的,我知道push_back,但我如何循环一个整数来获取其中的每个数字?这是允许的吗?最简单的方法是将其作为字符串输入,然后迭代该字符串,将每个元素推到一个向量中。在分别获得每个数字之后,lexi就不再需要这些了Caly将其转换为整数表示向量。好吧,我会尝试。对于我的应用程序来说,如果加法顺序相反,这并不重要。将其更改为堆栈,或者将向量视为堆栈…“反转顺序”与您以后读取向量的方式有关。使用“numbers.emplace(numbers.begin(),x%10);”而不是“push_back()'以避免反转向量的开销。使用
emplace(begin())
不会提高性能,反而会使性能更差,因为每个
emplace
在开始时都需要移动所有先前添加的元素,从而使整个循环的复杂度为O(n^2),而
std::reverse
的复杂度为O(1)我的编译器是在Ubuntu Linux上的GCC,它被更新到4.4.1版本。我通常用G++WALL-O来编译我的简单程序。如果不是,那么如何在C++上编译?@ MaMaHead Ag++STD= C++ 11—墙-O,应该工作得很好。这些数字代表线性反馈移位登记器中的抽头方程的幂,我将用数字作为。在一个位集中要进行异或运算的位的地址。所以,如果我想这样做,我认为转换成字符串是不正确的,我只希望它们是整数。谢谢。