使用rails非常新.我使用Devise实现了一个基本的登录系统.我想在sign_up页面中添加几个新字段(bio:string,name:string).我有一切正确显示并且新字段被添加到数据库中(当我在SQLbrowser中查看时)但是,它们没有填充,并且在用户提交sign_up表单后,有一条消息,其中一部分说:
Unpermitted parameters: bio, name
Run Code Online (Sandbox Code Playgroud)
我已将2个字符串添加到_devise_create_users.rb中
# added
t.string :bio
t.string :name
Run Code Online (Sandbox Code Playgroud)
我让它们出现在schema.rb中
ActiveRecord::Schema.define(version: 20130629002343) do
create_table "users", force: true do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at"
t.datetime "updated_at"
t.string "shortbio"
t.boolean "admin", default: false
t.string "realname"
t.string "name"
t.string "bio"
end
add_index "users", ["email"], name: "index_users_on_email", unique: true
add_index "users", ["reset_password_token"], name: …Run Code Online (Sandbox Code Playgroud) 我只是在学习并且可能有一个愚蠢的问题.
我有2个容器,一个是矢量,一个是列表.它们都填充了1,2,3,4.初始化后,我将容器的大小调整为7,然后打印容器的内容.
#include <iostream>
#include <vector>
#include <list>
int main ()
{
std::list<int> lst= {1,2,3,4};
std::vector<int> vec = {1,2,3,4};
lst.resize(7);
vec.resize(7);
for (auto p = lst.begin(); p!=lst.end(); ++p)
std::cout<<"List: "<<*p<<std::endl;
for (auto p = vec.begin(); p!=vec.end(); ++p)
std::cout<<"Vector: "<<*p<<std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我得到的输出中:
List: 1
List: 2
List: 3
List: 4
List: 0
List: 1994995248
List: 0
Vector: 1
Vector: 2
Vector: 3
Vector: 4
Vector: 0
Vector: 0
Vector: 0
Run Code Online (Sandbox Code Playgroud)
我是否必须明确告诉列表我正在添加0以避免这种情况?
我有一个用户定义类型(学生)的向量.我有2个函数几乎相同,除了它们内部的单个函数调用.
这是2个功能:
Student lowest_grade(const std::vector<Student> &all_students){
return *std::min_element(std::begin(all_students), std::end(all_students),
[](const Student &a, const Student &b){
return a.get_average() < b.get_average();});
}
Student highest_grade(const std::vector<Student> &all_students){
return *std::max_element(std::begin(all_students), std::end(all_students),
[](const Student &a, const Student &b){
return a.get_average() < b.get_average();});
}
Run Code Online (Sandbox Code Playgroud)
这两个函数都可以正常使用,但似乎可以很容易地构建它.我想创建一个我可以传入min_element或max_element的函数,例如:
template <typename func>
Student dispatch(const std::vector<Student> &all_students, func){
return *func(std::begin(all_students), std::end(all_students),
[](const Student &a, const Student &b){
return a.get_average() < b.get_average();});
}
Run Code Online (Sandbox Code Playgroud)
但我无法让这个工作正常.我不知道该怎么做.
编辑 - 这是我调用调度函数+错误消息的方式:
std::cout<<"lowest: "<< dispatch(all_students, std::max_element);
Run Code Online (Sandbox Code Playgroud)
错误消息是:
g++ m.cpp -std=c++11 -Wall -o main
m.cpp: In function ‘int …Run Code Online (Sandbox Code Playgroud) 我正在学习C++ lambda函数,这个可能很容易的问题就是给我一些问题.
我有一个带有一些整数的向量.我想删除所有偶数.
我目前已经删除了偶数,但是当我打印向量的内容时,我最后还是在向量中留下了一些重复的数据.
int main()
{
std::vector<int> v1 = {0,1,1,2,3,5,8,13,21,55,89};
for (const auto &i : v1) std::cout<< i << " ";
std::cout<<std::endl;
v1.erase(std::remove_if(v1.begin(), v1.end(), [](int i)
{ return (i % 2) == 0; }));
for (const auto &i : v1) std::cout<< i << " ";
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
0 1 1 2 3 5 8 13 21 55 89
1 1 3 5 13 21 55 89 55 89
Run Code Online (Sandbox Code Playgroud)
我希望第二行的输出为:
1 1 3 5 13 21 55 89
Run Code Online (Sandbox Code Playgroud)
编辑
感谢大家.我使用了错误版本的擦除(现在觉得非常愚蠢).这是正确的代码: …
我正在尝试编写一个函数,它接受一个输入数字并以相反的顺序输出数字.
即:
输入 - > 25输出 - > 52
输入 - > 125输出 - > 521
我是lisp的新手,如果它有用的话是c ++中的工作函数
function.cpp
int revs(int rev, int n)
{
if (n <= 0)
return rev;
return revs((rev * 10) + (n % 10), n/10);
}
Run Code Online (Sandbox Code Playgroud)
我在Racket中写了如下:
(define (revs rev n)
(if (<= n 0)
rev
(revs (+ (* rev 10) (modulo n 10)) (/ n 10))))
Run Code Online (Sandbox Code Playgroud)
但当我运行它(转速0 125)时,我收到此错误:
modulo: contract violation
expected: integer?
given: 25/2
argument position: 1st
other arguments...:
10
Run Code Online (Sandbox Code Playgroud)
当然我在这里做错了,但我不确定我错过了什么.
我的功能在这里工作,但我肯定是错误的.
我的程序使用FindWindow来查找正确的窗口.我需要双击此窗口中的特定位置.
我通过始终将窗口放在屏幕上的相同位置来使其工作,但如果我移动窗口,程序将尝试单击我提供的硬编码位置,它将无法工作.
这是功能:
void lobbyWindow(HWND main_client)
{
//RECT arect;
// GetWindowRect(main_client, &arect);
SetCursorPos(748,294);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我只需将鼠标移动到748,294并双击即可.我想要做的是在main_client窗口中将鼠标设置为100,100,所以如果我移动main_client窗口,鼠标仍然会点击正确的位置.
我正在创建它以尝试更好地理解排序算法和通用函数.我已经实现了一个基本的插入排序算法,我试图使它适用于多个数据结构(至少列表和数组).
因为我可以访问这样的列表:list [N]来获取值,我想我需要使用迭代器.所以我试图转换我的解决方案.这是我试图修改的基本插入排序算法:
int *insertionsort(int *a)
{
for (int i = 1; i<length(a); ++i)
{
int k = a[i];
int j = i-1;
{
while (j>=0 && a[j] > k)
{
a[j+1] = a[j--];
}
a[j+1] = k;
}
return a;
}
Run Code Online (Sandbox Code Playgroud)
这是我迄今为止通用版本的内容:
template <class T>
T insertionsort(T a)
{
for (auto i = a.begin()+1; i<a.end(); ++i)
{
auto k = i;
auto j = i-1;
while (j>=a.begin() && *j>*k)
{
(j + 1) = j--;
}
(j + 1) …Run Code Online (Sandbox Code Playgroud)